47

リファラーをチェックするだけで、クロス サイト リクエスト フォージェリ攻撃から保護できますか? リファラーがスプーフィングされる可能性があることは知っていますが、攻撃者がクライアントに対してそれを行う方法はありますか? トークンが標準であることは知っていますが、これは機能しますか?

4

6 に答える 6

47

これは 3 年前の質問で、基本的に同じことを述べている 4 つの異なる回答があります: 規範に従い、トークンを使用し、リファラーを使用しようとしないでください。

トークンは依然として最も安全なオプションと考えられていますが、リファラーを使用する方がはるかに簡単であり、かなり安全でもあります。すべての PUT/POST/PATCH/DELETE リクエストを確認し、リファラーが見つからない場合や間違ったドメインからの場合は攻撃と見なしてください。これらの種類のリクエストのリファラーを削除するプロキシは、(あるとしても) ごくわずかです。

CSRF 保護としてのリファラー ヘッダーのチェックに関するOWASPの推奨事項も参照してください。

リファラーヘッダーの確認

自分のブラウザでリファラー ヘッダーを偽装するのは簡単ですが、CSRF 攻撃では不可能です。リファラーのチェックは、ユーザーごとの状態を必要としないため、組み込みネットワーク デバイスで CSRF を防止するために一般的に使用される方法です。これにより、リファラーは、メモリが不足している場合の CSRF 防止の有効な方法になります。

ただし、リファラーのチェックは、CSRF 保護の弱点と見なされます。たとえば、オープン リダイレクトの脆弱性を利用して、リファラー チェックで保護されている GET ベースのリクエストを悪用できます。これは HTTP 仕様に違反しているため、GET 要求によって状態が変更されることはありません。

リファラー チェックには、よくある実装ミスもあります。たとえば、CSRF 攻撃が HTTPS ドメインから発信された場合、リファラーは省略されます。この場合、リファラーの欠如は、リクエストが状態変更を実行しているときの攻撃と見なす必要があります。また、リファラーに対する攻撃者の影響力は限られていることにも注意してください。たとえば、被害者のドメインが「site.com」の場合、攻撃者は「site.com.attacker.com」から CSRF エクスプロイトを発生させ、破損したリファラー チェックの実装を欺く可能性があります。XSS を使用して、リファラー チェックをバイパスできます。

于 2013-01-04T07:43:56.817 に答える
11

とりわけ、リファラーを使用しても、ブラウザー (または企業のプロキシ) がリファラーを送信しないユーザーには機能しません。

于 2009-09-12T01:16:31.817 に答える
7

唯一の正しい答えは、「とりわけ、リファラーを使用しても、ブラウザー (または企業のプロキシ) がリファラーを送信しないユーザーには機能しません。」 です。そうは言っても、それは今日では非常にまれです。リファラーは偽造できると言っている人は皆、それでいっぱいです。他の人のブラウザを他の方法 (XSS/トロイの木馬/etc) で制御しない限り、リファラーを偽造することはできません。アプリの使用にリファラーが必要な場合、それらは CSRF トークンと同じくらい効果的です。チェックが正しいことを100%確認していることを確認してください(たとえば、正規表現を使用している場合は、リファラーの最初の「^」からチェックしてください)。

于 2013-02-07T15:04:05.740 に答える
-9

いいえ、十分ではありません。攻撃者がクライアントに対してそれを行うのは非常に簡単です。あなたが尋ねるように、攻撃者がしなければならないことは、彼が作成したリンクをユーザーにクリックさせることだけです。その時点から、ゲームオーバーです

攻撃者は、元のサイトで使用されているフォームをコピーし、コードが自分のサイトにあるため、残りを偽装してから、被害者のサイトに送信します。

質問で述べたように、CSRF を防ぐためにはトークンが標準です

于 2009-09-12T01:14:04.313 に答える
-10

規範に従ってください: トークンを使用します。

リクエストはとにかくそのページから来ているので、リファラーをチェックしても実際には何もしません! 防止しようとしている問題は、ユーザーが何もせずにページが要求されていることです。ヒットしたページ自体ではありません。

トークンはこれを防ぐ方法です。生成してセッションに保存し、HTML に書き込みます。次に、投稿時に受け取ったものをチェックし、期待するものと一致するかどうかを確認します。そうでない場合は、失敗します。いずれにせよ、後で新しいトークンを生成します。

複数のページがある場合、これが人々を台無しにすることを考慮することも適切かもしれません。そのため、ページごとに異なるトークンを作成したい場合があります。

于 2009-09-12T02:40:49.200 に答える