[시큐어코딩 가이드] 2-5-1. Null Pointer 역참조

코드오류

타입 변환 오류, 자원의 부적절한 반환 등과 같이 개발자가 범할 수 있는 코딩 오류로 인해 유발되는 보안약점이다.

 

Null Pointer 역참조

정의

널 포인터 역참조는 '일반적으로 그 객체가 Null이 될 수 없다'라고 하는 가정을 위반했을 때 발생합니다. 공격자가 의도적으로 널 포인터 역참조를 발생시키는 경우, 공격자는 그 결과로 발생하는 예외상황을 이용해 추후 공격 계획에 활용할 수 있습니다.

 

안전한 코딩기법

None을 반환하는 함수를 사용할 때, None이 될 수 있는 데이터를 참조하기 전 해당 데이터의 값이 None 인지 검사하여 시스템 오류를 줄일 수 있습니다.

 

코드예제

다음은 안전하지 않은 코드 예제입니다. 파이썬에서는 포인터를 사용하지는 않지만 데이터에 대한 적절한 검사를 수행하지 않을 경우 Null pointer와 유사한 None 값 참조 오류를 범할 수 있습니다. 

#Null Pointer 역참조(안전X)
def parse_xml_bad(request):
    filename = request.GET.get('filename')

    if filename.count('.') > 0:
        name, ext = os.path.splitext(filename)
    else:
        ext = ''
    return render(request, 'success.html', {'msg': '안전X'})

 

filename = 

 

다음은 안전한 코드예제입니다. 참조하고자 하는 자원을 호출할 때는 반드시 개체가 None이 아닌지 검증을 해야 합니다.

#Null Pointer 역참조(안전O)
def parse_xml_good(request):
    filename = request.GET.get('filename')

    # 널포인트 역참조 해결 방법 (None 여부 인지 체크)
    if filename is None or filename.strip() == "":
        return render(request,'error.html', {'msg': '파일 이름이 없습니다.'})

    if filename.count('.') > 0:
        name, ext = os.path.splitext(filename)
    else:
        ext = ''
    return render(request, 'success.html', {'msg': '안전O'})

 

filename = 

 

 

 

코드오류/Null Pointer 역참조

[참고문헌] Python 시큐어코딩 가이드(2022) / KISA(한국인터넷진흥원)