对象只定义了Equals和Hashcode方法之一的漏洞
2021-11-15 12:46:26 Author: www.secpulse.com(查看原文) 阅读量:23 收藏

一、什么是“违规的对象模型:对象只定义了Equals和Hashcode方法之一”的漏洞?

也就是同一个对象没有同时包含equals和hashcode。因为Java对象需要遵守许多与相等相关的约束条件。其中一个约束条件是两个变量相等则两个变量必须具有相同的哈希值。换句话说,如果a.equals(b)== true,则a.hashCode()== b.hashCode()。

二、 “违规的对象模型:对象只定义了Equals和Hashcode方法之一”的漏洞构成条件有哪些?

满足以下条件,就构成了一个该类型的安全漏洞:

一个类中,只有equals或者hashCode方法中的一个。

三、 “违规的对象模型:对象只定义了Equals和Hashcode方法之一”的漏洞会造成哪些后果?

关键词:数据问题;程序执行异常

在集合中,相等的对象期望拥有相同的哈希值。若某个类定义了equals方法但是没有定义 hashCode方法,则相等的对象可能产生不同的哈希值。

四、“违规的对象模型:对象只定义了Equals和Hashcode方法之一”的漏洞的防范和修补方法有哪些?

在定义了equals方法的类中同时定义Hashcode方法。

五、 “违规的对象模型:对象只定义了Equals和Hashcode方法之一”的漏洞样例:

1-1.jpg

用悟空 静态代码检测工具分析上述程序代码,则可以发现代码中存在着“违规的对象模型:只定义了Equals和Hashcode之一” 导致的 代码缺陷,如下图:

2-1.jpg

“违规的对象模型:只定义了Equals和Hashcode之一“在CWE中被编号为CWE-581: Object Model Violation: Just One of Equals and Hashcode Defined

本文作者:中科天齐软件安全

本文为安全脉搏专栏作者发布,转载请注明:https://www.secpulse.com/archives/169278.html


文章来源: https://www.secpulse.com/archives/169278.html
如有侵权请联系:admin#unsafe.sh