web-dev-qa-db-ja.com

リファラーURLにリダイレクトするのは危険ですか?

WebアプリケーションのURLがRefererヘッダーで指定されたURLにリダイレクトするときに問題が発生しますか?

これは、_/whatever?url=evil.com_のようなオープンリダイレクトではありません ユーザーがリンクをクリックすることで悪用される可能性のある例 正当なアプリケーションへ(または少なくとも簡単ではありません) 。 この回答 は、(最後に向かって)リファラーを任意に偽造できないことを示しているようです-少なくともユーザーの助けがなければ、リダイレクトはおそらく問題ではありません。

MSA-15-0019関連ブログの投稿 )は私が質問しているようですが、それが問題である理由は説明されていません。私が理解している限り、ページに表示されているボタンにReferer URLを追加すると、XSSの脆弱性が反映される可能性があります。

これは、応答を示さないが何らかの方法で入力に作用する可能性のあるURLで発生する可能性のあるCSRF問題に関するものではないことに注意してください。しかし、特にLocationヘッダーについてはReferer URLにリダイレクトします。 それは問題ですか?もしそうなら、どのように/なぜですか?

それが重要であれば、アプリケーションはJavaで記述されており、私が心配しているコードは基本的にmyHttpServletResponse.sendRedirect(myHttpServletRequest.getHeader("Referer"))と同等です。このリクエストの結果としてサーバー上で他に何も起こらないと仮定すると、どのように問題になる可能性がありますか?

4
mwl

オープンリダイレクトの脆弱性を作成していますが、XSSの欠陥はありません。ただし、そもそも参照元ページにリダイレクトを戻す正当なユースケースは考えられません。少なくとも、リダイレクトループが発生するリスクがあります。

他のコンテキストでは、特に攻撃者がdata:javascript:などの疑似スキームを利用してXSSを実行する可能性があるため、ユーザーが制御するURLを許可するのは危険です。たとえば、引用符や角括弧をエスケープしても、<a href="[referrer]">Click me</a>の印刷は脆弱です。

ただし、ブラウザがそれらを送信しないため、疑似スキームがRefererヘッダーで終わるリスクはありません。また、Location: javascript:alert(1)などのヘッダーは無効と見なされ、主要なブラウザでは効果がありません。

MDNもその動作を示唆していますが、それほど冗長ではありません。

次の場合、Refererヘッダーはブラウザーから送信されません。

  • 参照リソースはローカルの「ファイル」または「データ」URIであり、

  • 安全でないHTTPリクエストが使用され、参照ページが安全なプロトコル(HTTPS)で受信されました。

(ソース)

3
Arminius

HTTPリファラーヘッダーは偽装できます。あなたはそれが安全ではないかと尋ねましたが、安全ではなくなる主要な脆弱性の1つを除外したので、何を知りたいのかはっきりしていませんが、私の理解からあなたの質問に対する短期的な答えは「はい」です。このリンクJavaでコード化されているアプリがWebアプリケーションと比較すると、方程式にどのように数字が含まれるか https:// stackoverflow。 com/questions/3104647/how-to-spoof-http-referer

0
Anonymous

唯一の脆弱性はセルフオープンリダイレクトであり、影響は非常に小さいものです。

JavaScriptまたはAjaxでリファラーを偽装することはできません。ブラウザが変更を上書きします。そのため、被害者を別のWebサイトにリダイレクトして開くことはできません。

0
Florian