오픈 리다이렉트

C# 오픈 리다이렉트

설명

사용자 입력 URL을 리다이렉트 대상으로 사용하면 공격자가 사용자를 신뢰할 수 없는 외부 사이트로 보낼 수 있습니다.

잠재적 영향

  • 피싱, 인증 토큰 탈취, 신뢰된 도메인을 이용한 우회 공격에 악용될 수 있습니다.

해결 방법

로컬 경로만 허용하거나, 허용된 도메인 목록으로 리다이렉트 대상을 검증합니다.

예시

변경 전은 Minimal API, 변경 후는 MVC 컨트롤러에서 사용하는 발췌입니다. Url, Redirect, LocalRedirect는 해당 컨트롤러의 API입니다.

변경 전

csharp
return Results.Redirect(returnUrl);

변경 후

csharp
if (!Url.IsLocalUrl(returnUrl)) {
    return Redirect("/dashboard");
}
return LocalRedirect(returnUrl);

설명:

  • 변경 전: 사용자가 제어하는 URL로 바로 리다이렉트하면 사용자를 공격자가 제어하는 사이트로 보낼 수 있습니다.
  • 변경 후: 리다이렉트 전에 Url.IsLocalUrl로 로컬 경로인지 확인하고, 허용된 로컬 경로만 LocalRedirect로 이동합니다.

참조