界: Code Quality
コードの質が低いと、予測できない動作につながります。ユーザーの視点には、それがしばしば使い勝手の悪さとなって現れます。攻撃者にとっては、予期せぬ方法でシステムにストレスを与える機会となります。
Code Correctness: Invalid Call to Object.equals()
Abstract
このプログラムは、配列に対して
java.util.Arrays.equals().
ではなく Object.equals()
をコールしています。 Explanation
配列に対して
例 1: 次の例では、2 つの配列を
これは、どこかの時点で片方の配列から他方に割り当てがない限り、ほとんどの場合実行されることのないコードです。
Object.equals()
をコールすることは、多くの場合誤りです。この関数は配列の要素ではなく配列のアドレスが等価かどうかをチェックするため、通常は java.util.Arrays.equals()
で置き換える必要があります。 例 1: 次の例では、2 つの配列を
Object.equals()
関数を使ってチェックしようとしています。
...
int[] arr1 = new int[10];
int[] arr2 = new int[10];
...
if (arr1.equals(arr2)){
//treat arrays as if identical elements
}
...
これは、どこかの時点で片方の配列から他方に割り当てがない限り、ほとんどの場合実行されることのないコードです。
References
[1] EXP02-J. Do not use the Object.equals() method to compare two arrays CERT
[2] Standards Mapping - Common Weakness Enumeration CWE ID 398, CWE ID 754
[3] Standards Mapping - OWASP Application Security Verification Standard 4.0 11.1.7 Business Logic Security Requirements (L2 L3)
[4] Standards Mapping - SANS Top 25 2010 Risky Resource Management - CWE ID 754
desc.structural.java.code_correctness_call_to_object_equals