[시큐어코딩 가이드] 2-4-2. 오류상황 대응 부재

오류상황 대응 부재

정의

오류가 발생할 수 있는 부분을 확인하였으나, 오류에 대해 예외처리를 하지 않을 경우, 공격자는 오류 상황을 악용해 개발자가 의도하지 않은 방향으로 프로그램이 동작하도록 할 수 있습니다.

 

안전한 코딩기법

오류가 발생할 수 있는 부분에 대하여 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(한국인터넷진흥원)