계: Code Quality

코드 품질이 낮으면 예측할 수 없는 동작이 발생합니다. 사용자 입장에서는 사용 편의성이 떨어지는 것으로 나타나는 경우가 많습니다. 공격자에게는 예상치 못한 방법으로 시스템에 부담을 줄 수 있는 기회가 됩니다.

Code Correctness: Invalid Call to Object.equals()

Abstract
이 프로그램은 java.util.Arrays.equals(). 대신 배열에 대해 Object.equals()를 호출합니다.
Explanation
대부분의 경우에는 배열에 대한 Object.equals() 호출은 잘못된 것입니다. 이와 같이 호출하면 배열 요소가 아니라 배열 주소가 같은지를 확인하기 때문입니다. 일반적으로는 java.util.Arrays.equals()를 대신 호출해야 합니다.

예제 1: 다음 코드에서는 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