用語辞典11分で読める

オープンリダイレクトとは:信頼されたサイトのURLから別サイトへ転送される脆弱性

オープンリダイレクトは、あなたのサイトのURLを経由して任意の外部サイトへ転送できてしまう脆弱性です。信頼されたドメインを“踏み台”にしたフィッシングに悪用されます。仕組みの図解と、基本の防御(リダイレクト先を許可リスト化・外部URLを受け取らない)を防御目線で解説します。

本文を読む
公開日
更新日
目次

URLの先頭は本物のドメインなのに、開くと全く違うサイトへ転送されてしまう脆弱性が、オープンリダイレクトです。仕組みと確実な防ぎ方を解説します(攻撃手順は載せません)。

なぜ危険か

危険の本質は「ドメインへの信頼を悪用される」点です。

悪用のされ方何が起きる
フィッシングの踏み台リンク先頭が本物ドメイン→利用者もフィルタも信用→偽サイトへ誘導
認証フローの横取りOAuth等のリダイレクト先を細工し、トークン/コードの受け渡しを狙う
他の脆弱性の増幅SSRF や XSS と組み合わせて被害を拡大

なぜ成立するか(仕組み)

「ログイン後に元のページへ戻す」などの機能で、戻り先URLをそのまま信じて転送すると起こります。利用者が見るURLの“先頭”は本物のドメインなので、最後まで疑いにくいのが厄介です。

本物ドメイン/login?next=(先頭は信頼できる)
next= に外部URLを仕込まれる
↓ サイトが遷移先を検証せず転送
利用者は“本物を踏んだ”つもりで偽サイトへ=フィッシング成立
先頭が本物ドメインなので信用される。だが遷移先パラメータの外部URLへそのまま飛ばすと、踏み台にされる。

防御:外部URLを受け取らない

1

遷移先は相対パスだけ許可(最重要)

戻り先は /dashboard のような相対パスのみ受け付け、フルURL(http://・// 始まり)は拒否。利用者が遷移先ドメインを指定できる余地を作らない。

2

許可リストに照合する

動的な遷移先が要るなら、既知の遷移先の固定セット(マップ)に対してだけ許可。一致しなければ既定ページへ。

3

文字列判定に頼らない

//evil・バックスラッシュ・@・多重エンコード等の回避が多い。受け取る設計を変える(相対+許可リスト)方が、フィルタ追記より確実。

4

どうしても外部へ飛ばすなら明示する

外部遷移が仕様なら、確認ページを挟んで「外部サイトへ移動します」と利用者に見せる。黙って飛ばさない。

当サイトの視点:単体では“低”でも、フィッシングと組むと効く

オープンリダイレクトは単体だと深刻度を低く見られがちですが、本物のドメインへの信頼を攻撃者に利用されるため、フィッシングや認証横取りと組み合わさると被害が大きくなります。だからこそ「相対パス+許可リスト」という設計レベルの対策で原因をなくすのが効率的です。SSRF(サーバーを任意先に通信させる)と発想が似ており、どちらも「遷移先・接続先を利用者に決めさせない」が共通の防御原則です。

オープンリダイレクト・SSRF・フィッシングの違い

オープンリダイレクトは、それ自体が攻撃というより、他の攻撃を信じさせやすくする欠陥です。関係の近い用語と並べると位置づけが分かります。

用語何が起きるか誰が対策するか
オープンリダイレクト本物のサイトのURLから、利用者のブラウザが外部サイトへ転送される転送する機能を持つサイトの開発者
SSRF指定された宛先へ、ブラウザではなくサーバーがリクエストを送るURLを取りに行く機能を持つサイトの開発者
フィッシング偽サイトで、ID・パスワードやカード情報を入力させる利用者・メールの受信側・なりすまされた組織

フィッシングのリンクに本物のドメインが使えると、利用者もメールのフィルタも見抜きにくくなります。オープンリダイレクトをなくすことは、自分のドメインを詐欺に使わせないための対策です。

具体例:ログイン連携(OAuth)での扱い

オープンリダイレクトが特に問題になるのは、ログイン連携(OAuth)です。認可の後、利用者は認可コードやトークンを持ったまま、登録されたリダイレクトURIへ戻されます。その戻り先のサイトにオープンリダイレクトがあると、コードやトークンが外部サイトへ送られるおそれがあります。

このため、OAuth 2.0のセキュリティのベストプラクティス(RFC 9700、2025年1月)は次の2点を求めています。

  • 認可サーバーは、リダイレクトURIを事前登録したものと完全一致で照合する
  • クライアントも認可サーバーも、クエリパラメータで受け取った任意のURLへ転送するページを置かない

オープンリダイレクトは CWE-601 として分類されています。単体で深刻度が高く評価されることは多くありませんが、ログイン連携の近くにあると重大な問題になります。

深刻度の目安

オープンリダイレクトは、単体では中程度と評価されることが一般的です。よく見られる評価の一例は、CVSS 3.1 で 6.1 です。

  • 利用者がリンクを開く必要がある(UI:R)
  • 影響は別サイトへの誘導にとどまり、サイトのデータを直接読めるわけではない
  • ただし影響が転送元のサイトの外へ及ぶため、スコープ変更(S:C)として扱われる

点数だけで後回しにしないでください。ログイン連携の戻り先にある場合や、フィッシングの踏み台として実際に使われている場合は、優先して直します。自分の条件で点数を確かめたいときは CVSS計算ツールを使えます。

フレームワークに用意された安全な機能

自分で文字列を判定するより、フレームワークの機能を使う方が漏れが出にくくなります。代表的なものを挙げます。

フレームワーク用意されている機能内容
Ruby on Railsredirect_to の既定動作と url_from既定では別ホストへの転送を防ぐ。外部へ転送するには allow_other_host: true の明示が要る。url_from は同じホストのURLだけを返し、それ以外は nil を返す
ASP.NET CoreLocalRedirect と Url.IsLocalUrl同じサイト内のURLだけに転送し、外部URLなら例外にする

Railsの公式ドキュメントは、allow_other_host: true を使う場合でも、利用者から受け取ったパラメータをそのまま渡すのは安全でないと注意しています。外部へ転送する機能を足すときは、この組み合わせを避けます。

自分のサイトで確認する方法

1

転送先を受け取るパラメータを探す

ソースコードとURLの一覧で、next・url・redirect・return_to・continue・callback のような名前のパラメータを探し、それをそのまま転送処理に渡していないかを確認する。

2

照合の方法を確認する

転送先を検証している箇所が、文字列の前方一致や「http で始まるか」の判定になっていないかを見る。URLの解析器でスキーム・ホスト・ポートに分けてから許可リストと照合するか、フレームワークの安全な関数(ASP.NET Core の LocalRedirect など)を使う。

3

ログイン連携の登録内容を見る

OAuthやSSOの設定画面で、登録しているリダイレクトURIにワイルドカードや不要な古いURLが残っていないかを確認する。

4

IDで転送先を選ぶ形にできないか検討する

外部への転送が必要なら、URLそのものではなく短いIDを受け取り、サーバー側の対応表で転送先を決める形にする。OWASPもこの方法を勧めている。

5

アクセスログで外部への転送を探す

アクセスログで、転送先のパラメータに自分のドメイン以外のホスト名が入ったリクエストを探す。見つかった場合は、その転送処理が外部へ飛ばしていないかを確かめ、誰かがリンクを配っていないかの手がかりにする。

出典(一次情報)

  • OWASP「Unvalidated Redirects and Forwards Cheat Sheet」 — cheatsheetseries.owasp.org(IDとサーバー側の対応表、解析したURLでの許可リスト照合、確認ページ)
  • IETF RFC 9700「Best Current Practice for OAuth 2.0 Security」(2025年1月) — datatracker.ietf.org(リダイレクトURIの完全一致、オープンリダイレクタの禁止)
  • Ruby on Rails API「ActionController::Redirecting」 — api.rubyonrails.org(別ホストへの転送の既定の防止、allow_other_host、url_from)
  • Microsoft「Prevent open redirect attacks in ASP.NET Core」 — learn.microsoft.com(LocalRedirect、IsLocalUrl、外部URLが来たときの記録)
  • MITRE「CWE-601: URL Redirection to Untrusted Site ('Open Redirect')」 — cwe.mitre.org

次に読む

分類番号

CWE は脆弱性の原因となる弱点の種類を、MITRE ATT&CK は攻撃者の手口を分類した番号体系です。どちらも MITRE が管理し、脆弱性情報や検知ルールの分類に広く使われています。

CWE™: Copyright © 2006–2026, The MITRE Corporation. CWE is a trademark of The MITRE Corporation. The MITRE Corporation hereby grants you a non-exclusive, royalty-free license to use CWE for research, development, and commercial purposes. Any copy you make for such purposes is authorized on the condition that you reproduce MITRE’s copyright designation and this license in any such copy. CWE Terms of Use

よくある質問

Qオープンリダイレクトの何が問題?
A

URLの“最初のドメイン”が信頼できる本物(例:ログインページ)なので、利用者もメールフィルタも安心してクリックします。ところがサイトが利用者を任意の外部サイトへ転送してしまうため、本物のドメインを“踏み台”にしたフィッシングや、認証フローでのトークン横取りの起点に悪用されます。

Q一番の防御は?
A

『遷移先に外部URLを受け取らない』ことです。ログイン後の戻り先などは、フルURLではなく相対パス(/dashboard 等)だけを許可し、許可リスト(既知の遷移先の固定セット)に照合します。どうしても外部に飛ばすなら、確認ページを挟んで利用者に明示します。

Qhttp かどうかチェックすれば十分?
A

不十分です。// で始まる省略形(//evil.example)やバックスラッシュ、エンコード、@ を使った紛らわしいURLなど回避手法が多数あります。文字列を判定するより、そもそも外部URLを受け取らない設計(相対パス+許可リスト)が確実です。

Qオープンリダイレクトとは、簡単に言うと?
A

あるサイトのURLを開いたのに、そのサイトが利用者を、URLに書かれた任意の別サイトへそのまま転送してしまう状態のことです。転送先を決める部分(?next= など)を外から自由に書き換えられることが原因です。

QOAuthやログイン連携では、どう設定すればいい?
A

リダイレクトURI(認可後に戻る先)を、事前に登録したものと完全一致で照合します。OAuth 2.0のセキュリティのベストプラクティス(RFC 9700、2025年1月)は、完全一致での照合を求め、利用者のブラウザを任意のURLへ転送するページ(オープンリダイレクタ)を置いてはいけないとしています。ワイルドカードや前方一致での登録は避けます。

Q利用者として、どう見分ければいい?
A

リンクの先頭のドメインではなく、開いた後のアドレスバーを確認します。ログインやカード情報の入力を求められたら、アドレスバーのドメインが本物かを見てから入力します。不安なら、メールのリンクではなく、ブックマークや公式アプリから開き直します。

Qオープンリダイレクトの深刻度は?CVSSではどのくらい?
A

単体では中程度の評価が一般的です。利用者がリンクを開く必要があり、影響は別サイトへの誘導にとどまるためです。よく見られる評価の一例は CVSS 3.1 で 6.1(AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:L/A:N)です。ただしログイン連携(OAuth)の戻り先にある場合は、コードやトークンの流出につながるため、実際の影響はもっと大きくなります。

Qリダイレクトとフォワードの違いは?
A

リダイレクトは、サーバーがブラウザに「このURLへ移動して」と返し、ブラウザが自分で別のURLを開く動きです。フォワードは、サーバーの内部で別の処理へ渡す動きで、ブラウザのURLは変わりません。OWASPは両方をまとめて扱い、リダイレクトは外部サイトへの誘導、フォワードはアクセス制御の確認を通り抜けて、本来は許可されていない管理機能へ到達できてしまうことが問題になるとしています。

Q脆弱性診断でオープンリダイレクトを指摘されたら、まず何をする?
A

指摘されたパラメータだけをふさぐのではなく、同じように転送先を受け取る箇所を全部洗い出します。そのうえで、相対パスだけを受け付ける共通の関数を1つ作り、すべての転送処理をそれに通します。外部への転送が本当に必要な箇所だけ、許可リストか確認ページを使います。