불완전한 URL 입력값 검증
Incomplete URL sanitization
설명
불완전한 URL 입력값 검증은 사용자 입력값이 충분히 검증되지 않고, URL 파라미터 또는 경로로 사용될 때 발생하는 취약성입니다. 이는 공격자가 악의적인 입력값을 통해 서버 측에서 예기치 않은 동작을 유발하거나, 다른 사용자에게 악성 링크를 전달하는 등의 공격을 할 수 있게 합니다.
잠재적 영향
정보 노출: 공격자가 민감한 정보를 획득할 수 있습니다.
XSS (Cross-Site Scripting): 공격자가 악의적인 스크립트를 삽입하여 다른 사용자의 브라우저에서 실행될 수 있습니다.
리다이렉션 공격: 사용자를 악성 웹사이트로 리다이렉트할 수 있습니다.
해결 방법
입력값 검증: URL 입력값에 대해 허용된 형식 및 길이를 검증합니다.
인코딩: URL에 포함될 수 있는 특수 문자를 인코딩하여 해석되지 않도록 합니다.
화이트리스트: 허용된 도메인이나 경로만 사용되도록 제한합니다.
취약한 코드 및 안전한 코드 예시
Unsafe Django code & Safe Django code
# Unsafe Django code
from django.shortcuts import redirect
def unsafe_redirect(request):
url = request.GET.get('next')
return redirect(url)설명:
취약한 코드: 사용자 입력값을 검증하지 않고 그대로 URL 리다이렉트에 사용하여, 공격자가 악의적인 URL을 통해 사용자를 피싱 사이트로 리다이렉트할 수 있습니다.
안전한 코드: URL 입력값이 유효한지 정규식을 사용하여 검증하고, 유효하지 않은 경우 에러를 반환합니다.
Unsafe Flask code & Safe Flask code
설명:
취약한 코드: 사용자 입력값을 검증하지 않고 그대로 URL 리다이렉트에 사용하여, 공격자가 악의적인 URL을 통해 사용자를 피싱 사이트로 리다이렉트할 수 있습니다.
안전한 코드: URL 입력값이 유효한지 정규식을 사용하여 검증하고, 유효하지 않은 경우 에러를 반환합니다.
Unsafe FastAPI code & Safe FastAPI code
설명:
취약한 코드: 사용자 입력값을 검증하지 않고 그대로 URL 리다이렉트에 사용하여, 공격자가 악의적인 URL을 통해 사용자를 피싱 사이트로 리다이렉트할 수 있습니다.
안전한 코드: URL 입력값이 유효한지 정규식을 사용하여 검증하고, 유효하지 않은 경우 에러를 반환합니다.
참조
Last updated