- Open Redirectを防止することは「自分のサイトを“攻撃者の踏み台”にしないための設計」です
- Open Redirectがどう悪用されるのかを具体的にイメージする
- ステップ1:リダイレクト先を「外部URLとして自由に指定させない」という方針を持つ
- ステップ2:リダイレクト先を「パスのみ」に限定する(Originを固定する)
- ステップ3:リダイレクト先をホワイトリストで管理する(より堅牢な方法)
- ステップ4:絶対URLが来た場合は「自サイトOriginかどうか」を検証する
- ステップ5:業務で使える「Open Redirect防止ユーティリティ」(まとめ版)
- ステップ6:Open Redirect防止で「絶対にやってはいけないこと」を明確にしておく
- ステップ7:Open Redirectとフィッシングの関係を理解しておく(重要な深掘り)
- ステップ8:チームで共有するための「リダイレクト設計ルール」をコードとドキュメントに刻む
- まとめ: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 の悪用パターンです。
