物件只定義了Equals和Hashcode方法之一的漏洞

zktq2021發表於2021-09-17

本期主題為違規的物件模型:物件只定義了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


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70000012/viewspace-2792550/,如需轉載,請註明出處,否則將追究法律責任。

相關文章