오픈 리다이렉트

Open Redirect

설명

오픈 리다이렉트(Open Redirect)는 애플리케이션이 외부 URL로의 리다이렉션을 사용자 입력에 기반하여 수행할 때 발생하는 취약성입니다. 이는 공격자가 피싱 공격을 수행하거나 악성 사이트로 사용자를 유도하는 데 악용될 수 있습니다.

잠재적 영향

  • 피싱 공격: 공격자가 사용자를 속여 악성 사이트로 유도하여 민감한 정보를 탈취할 수 있습니다.

  • 신뢰도 손상: 사용자가 악성 사이트로 리다이렉트되어 애플리케이션에 대한 신뢰도가 떨어질 수 있습니다.

  • 보안 정책 우회: 공격자가 리다이렉트를 통해 보안 정책을 우회할 수 있습니다.

해결 방법

  • 화이트리스트 사용: 리다이렉트할 URL을 화이트리스트로 제한합니다.

  • 사용자 입력 검증: 사용자 입력값을 철저히 검증하고, 신뢰할 수 있는 값만 리다이렉트에 사용합니다.

  • 상대 경로 사용: 외부 URL 대신 내부 경로를 사용하여 리다이렉트합니다.

취약한 코드 및 안전한 코드 예시

Unsafe Django code & Safe Django code

# Unsafe Django code
from django.http import HttpResponseRedirect

def unsafe_redirect(request):
    url = request.GET.get('next')
    return HttpResponseRedirect(url)

설명:

  • 취약한 코드: 사용자 입력값을 검증하지 않고 리다이렉트에 사용하여 오픈 리다이렉트 공격에 취약합니다.

  • 안전한 코드: 화이트리스트를 사용하여 신뢰할 수 있는 URL로만 리다이렉트합니다.

Unsafe Flask code & Safe Flask code

설명:

  • 취약한 코드: 사용자 입력값을 검증하지 않고 리다이렉트에 사용하여 오픈 리다이렉트 공격에 취약합니다.

  • 안전한 코드: 화이트리스트를 사용하여 신뢰할 수 있는 URL로만 리다이렉트합니다.

Unsafe FastAPI code & Safe FastAPI code

설명:

  • 취약한 코드: 사용자 입력값을 검증하지 않고 리다이렉트에 사용하여 오픈 리다이렉트 공격에 취약합니다.

  • 안전한 코드: 화이트리스트를 사용하여 신뢰할 수 있는 URL로만 리다이렉트합니다.

참조

Last updated