Secure Coding Guide | 널 포인터 역참조
정의
널(null)로 설정된 변수의 주소값을 참조했을 때 발생하는 보안약점이다.
영향
내부 정보 유출
안전하지 않은 소스코드
메소드로부터 반환된 NULL을 참조하는 경우
public Object returnNull() {
return null;
}
public void testNull() {
String str = returnNull().toString();
}
public void getInputFromFile() {
try {
BufferedReader br = new BufferedReader(new FileReader("input.dat"));
String str = br.readLine();
str.toUpperCase();
...
}
null을 반환하는 메소드 또는 표준라이브러리 메소드의 결과 값을 사 용할 경우 Null Pointer 역참조가 발생한다.
null을 반환하는 메소드를 사용할 경우 반환 값에 대해 null 검사를 한 후에 사용하도록 한다.
NULL을 직접 참조하는 경우
public class ForwardNullEx {
public void test() {
String uppercased = toUpperCase(null);
}
public String toUpperCase(String arg) {
arg.toUpperCase();
}
}
toUpperCase 메소드를 null 상수를 인자로 하여 호출한다. toUpperCase 메소드 내에서 인자 arg를 참조할 때, arg에 null이 전달되므 로 Null Pointer 역참조가 발생한다.
null dereference가 발생하지 않도록 null 검사를 한 후에 변수를 사용해야 한다.
NULL과 비교한 적이 있는 값을 이후 비교 없이 사용하는 경우
public class UncheckedNullEx {
public void test(String x) {
String str = "";
System.out.println(str);
if(x != null) {
str = x.toUpperCase();
}
x.toString();
}
}
변수 “x"가 null일 가능성을 확인 후에 다시 “x"에 대한 null 검사 없이 사용 하였다.
null 가능성이 있는 변수에 대해 항상 null 검사를 하도록 한다.
NULL 검사를 잘못 했을 경우
String url = request.getParameter("url");
if ( url.equals("") || url == null ) {
...
}
변수 url에 대해 널검사를 하고 있으나, null 발생시 url.equals 에서 null Pointer 역참조가 발생한다.
최종 수정 : 2018-05-27