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"))
と同等です。このリクエストの結果としてサーバー上で他に何も起こらないと仮定すると、どのように問題になる可能性がありますか?
オープンリダイレクトの脆弱性を作成していますが、XSSの欠陥はありません。ただし、そもそも参照元ページにリダイレクトを戻す正当なユースケースは考えられません。少なくとも、リダイレクトループが発生するリスクがあります。
他のコンテキストでは、特に攻撃者がdata:
やjavascript:
などの疑似スキームを利用してXSSを実行する可能性があるため、ユーザーが制御するURLを許可するのは危険です。たとえば、引用符や角括弧をエスケープしても、<a href="[referrer]">Click me</a>
の印刷は脆弱です。
ただし、ブラウザがそれらを送信しないため、疑似スキームがReferer
ヘッダーで終わるリスクはありません。また、Location: javascript:alert(1)
などのヘッダーは無効と見なされ、主要なブラウザでは効果がありません。
MDNもその動作を示唆していますが、それほど冗長ではありません。
次の場合、
Referer
ヘッダーはブラウザーから送信されません。
参照リソースはローカルの「ファイル」または「データ」URIであり、
安全でないHTTPリクエストが使用され、参照ページが安全なプロトコル(HTTPS)で受信されました。
HTTPリファラーヘッダーは偽装できます。あなたはそれが安全ではないかと尋ねましたが、安全ではなくなる主要な脆弱性の1つを除外したので、何を知りたいのかはっきりしていませんが、私の理解からあなたの質問に対する短期的な答えは「はい」です。このリンクJavaでコード化されているアプリがWebアプリケーションと比較すると、方程式にどのように数字が含まれるか https:// stackoverflow。 com/questions/3104647/how-to-spoof-http-referer
唯一の脆弱性はセルフオープンリダイレクトであり、影響は非常に小さいものです。
JavaScriptまたはAjaxでリファラーを偽装することはできません。ブラウザが変更を上書きします。そのため、被害者を別のWebサイトにリダイレクトして開くことはできません。