오류상황 대응 부재
정의
오류가 발생할 수 있는 부분을 확인하였으나, 오류에 대해 예외처리를 하지 않을 경우, 공격자는 오류 상황을 악용해 개발자가 의도하지 않은 방향으로 프로그램이 동작하도록 할 수 있습니다.
안전한 코딩기법
오류가 발생할 수 있는 부분에 대하여 try-except문을 사용하여 예외처리를 해야 합니다.
코드예제
다음은 안전하지 않은 코드예제입니다. try문에서 오류를 포착하고 있지만, 그 오류에 대해 아무 조치를 하지 않는 상황을 보여주는 코드입니다.
#오류상황 대응 부재(안전X)
def error_test_bad(request):
try:
num = int(request.GET.get('num') or 1)
print(f'{100/num}')
except ZeroDivisionError as ze:
pass
except Exception as e:
pass
return render(request, 'success.html', {'msg': '정상 작동'})
num = ajfkla
num에 문자열이 입력되었으므로 오류가 발생해야 하지만 아무 조치를 하지 않아 정상 작동으로 인식하였습니다.
예외상황 발생 시 프로그램이 개발자의 의도와 다르게 동작하지 않도록 반드시 예외처리 구문을 추가해야 합니다. 다음은 안전한 코드예제입니다.
#오류상황 대응 부재(안전O)
def error_test_good(request):
try:
num = int(request.GET.get('num') or 1)
print(f'{100/num}')
except ZeroDivisionError as ze:
return render(request, 'error.html', {'msg': f'오류발생, {ze}'})
except Exception as e:
return render(request, 'error.html', {'msg': f'오류발생, {e}'})
return render(request, 'success.html', {'msg': '정상 작동'})
num = 0
에러처리/오류 메시지 정보노출
[참고문헌] Python 시큐어코딩 가이드(2022) / KISA(한국인터넷진흥원)