코드오류
타입 변환 오류, 자원의 부적절한 반환 등과 같이 개발자가 범할 수 있는 코딩 오류로 인해 유발되는 보안약점이다.
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(한국인터넷진흥원)