JavaScript Tips | セキュリティ:Open Redirectを防止する

JavaScript JavaScript
スポンサーリンク
スポンサーリンク
  1. Open Redirectを防止することは「自分のサイトを“攻撃者の踏み台”にしないための設計」です
  2. Open Redirectがどう悪用されるのかを具体的にイメージする
    1. 典型的な危険なパターン
  3. ステップ1:リダイレクト先を「外部URLとして自由に指定させない」という方針を持つ
  4. ステップ2:リダイレクト先を「パスのみ」に限定する(Originを固定する)
    1. 危険な例(絶対URLをそのまま使う)
    2. 安全な例(パスのみを許可する)
  5. ステップ3:リダイレクト先をホワイトリストで管理する(より堅牢な方法)
    1. 使用例
  6. ステップ4:絶対URLが来た場合は「自サイトOriginかどうか」を検証する
    1. 使用例
  7. ステップ5:業務で使える「Open Redirect防止ユーティリティ」(まとめ版)
    1. 使用例:ログイン後のリダイレクト
    2. 使用例:設定画面からの戻り先指定(絶対URLを扱う場合)
  8. ステップ6:Open Redirect防止で「絶対にやってはいけないこと」を明確にしておく
    1. 1. ユーザー入力をそのまま location.href に渡す
    2. 2. redirect パラメータに絶対URLを許可する
    3. 3. 「便利だから」と安易に外部URLへのリダイレクト機能を作る
  9. ステップ7:Open Redirectとフィッシングの関係を理解しておく(重要な深掘り)
  10. ステップ8:チームで共有するための「リダイレクト設計ルール」をコードとドキュメントに刻む
    1. コードコメントで明示する
    2. レビュー時のチェックポイント
  11. まとめ:Open Redirectを防止することは「自分のサイトの信頼を守るための設計」です

Open Redirectを防止することは「自分のサイトを“攻撃者の踏み台”にしないための設計」です

業務システムでは、ログイン後や処理完了後に「元の画面へ戻す」「指定されたURLへ遷移する」といった機能をよく作ります。

  • ログイン後に redirect パラメータで指定されたページへ移動する
  • フォーム送信後に returnUrl へ戻る
  • メール内のリンクからアクセスした後、指定URLへ遷移する

このとき、ユーザー入力やURLパラメータをそのまま信じてリダイレクトに使うと、 「Open Redirect(オープンリダイレクト)」という脆弱性が生まれます。

Open Redirectは、 自分のサイトを“正規の入り口”として利用し、ユーザーを攻撃サイトへ誘導するための手口です。

ここでは、初心者向けに、 「何が危険なのか」→「どう防ぐのか」→「実務で使えるJavaScriptユーティリティ」 という流れでステップバイステップで解説していきます。

Open Redirectがどう悪用されるのかを具体的にイメージする

典型的な危険なパターン

例えば、次のようなURLを考えます。

https://example.com/login?redirect=https://evil.com/phishing

ログイン処理後のコードが次のようになっているとします。

const params = new URLSearchParams(location.search);
const redirect = params.get("redirect");

if (redirect) {
  location.href = redirect; // 検証なしでリダイレクト
} else {
  location.href = "/home";
}
JavaScript

攻撃者は、このURLをユーザーに送ります。

「https://example.com からの正規のログインリンクですよ」

ユーザーは example.com という正しいドメインを見て安心し、 ログインします。

ログイン後、ブラウザは redirect パラメータに従って https://evil.com/phishing へ遷移します。

ユーザーから見ると、

「正規サイトにログインした後に表示された画面だから、きっと本物だろう」

と誤解しやすく、 そこでパスワードやクレジットカード情報を入力してしまう―― これが Open Redirect の悪用パターンです。

タイトルとURLをコピーしました