불완전한 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