オープンリダイレクト

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に渡します。

参考資料