설명
사용자 입력 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로 이동합니다.