代码安全 | 第十七期:对象只定义了Equals和Hashcode方法之一的漏洞

本期主题为违规的对象模型:对象只定义了Equals和Hashcode方法之一漏洞的相关介绍。

一、什么是“违规的对象模型:对象只定义了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方法之一”的漏洞样例:

 

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

 

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

posted @ 2021-05-25 14:57  中科天齐软件原生安全  阅读(106)  评论(0编辑  收藏  举报