2

ユーザーがページにアクセスするたびに追跡する Web ページがあります。これは、誰かがあなたの「プロフィール ページ」にアクセスすると、その訪問が追跡され、あなたに通知される「プロフィール ページ」です。

これは、プロファイル ビューを追跡するstackoverflow のプロファイル ページに似ています(ただし、詳細は異なります)。ユニークな訪問者があなたのプロフィール ページにアクセスするたびに、プロフィール ビュー カウンターが増加します。

ブラウザの Cookie に保存されているランダムに生成されたトークンを使用してユーザーを認証します。そして、これは私がCSRFの大きな問題を抱えている場所です.ランダムなWebサイトは、ユーザーが知らないうちに、ユーザーに代わってWebページにアクセスする可能性があるためです. たとえば、攻撃者の Web ページには、私の Web ページを指す iframe または画像が埋め込まれているだけです。

<img src="http://mysite.com/profile-page">

or

<iframe src="http://mysite.com/profile-page"></iframe>

ユーザーが攻撃者の Web ページにアクセスするときはいつでも、知らないうちに誰かのプロファイル ページにアクセスしていることになります (アクセスはログに記録されます)。

具体的な例を使用して、私の主張を示しましょう。

最近の多くの Web サイトでは、ユーザーが画像 URL を投稿できるようになっています。ユーザーは次のような画像を投稿できます。

 <img src="https://stackoverflow.com/users/632951/pacerier">

イメージ タグのsrcは実際にはイメージ ファイルではありませんが、ブラウザは引き続きリクエストを行い、空のイメージを表示します。

ここに画像の説明を入力

これは、攻撃者がユーザーに代わってhttps://stackoverflow.com/users/632951/pacerierへのリクエストに成功したことを意味します。おそらく、ユーザーはそれを認識していません。

CSRF および XSRF 攻撃の防止 で述べたように、いくつかの非表示の入力フィールドと、「このページをリクエストしてもよろしいですか?」というフォームを追加できます。不利な点は、ページを要求するすべての本物のユーザーが Web ページにアクセスする前にボタンをクリックする必要がありYes, Confirm Request Page、これによりユーザビリティが大幅に損なわれることです。トラッキングを行うすべてのページをユーザーに強制的にクリックさせたくありません。 Confirm

CSRF get リクエストを防ぐためのよりユーザーフレンドリーな方法は他にありますか?

埋め込みページの場合、ドメインhttp://mysite.comからページを要求しないようにブラウザーに指示するにはどうすればよいですか(ブラウザーの URL バーに要求されたページが表示されていません。つまり、それが埋め込み画像、フレーム、iframe などであることを意味します)。 ?

4

1 に答える 1

2

かなりシンプルで信頼性の高い方法の 1 つを次に示します。

  • ページに対して行われたリクエストではなく、ページの何かによって行われたリクエスト (たとえば、AJAX リクエスト、および/またはページ上の画像のリクエスト) をカウントします。imgブラウザは実際に HTML ページを画像としてレンダリングしようとはしないため、JavaScript を実行したり、ページ上の (サブ) 画像をロードしたりしないため、これでハッキングに対処できます。

  • ページにヘッダーを追加してX-Frame-Options: DENY、ブラウザーがいずれかでレンダリングしないようにしiframeます。window.parent == window古いブラウザーの場合 (またはベルトとサスペンダーのアプローチの一部として)、 AJAX 確認を送信する前にJavaScript で確認することもできます。

  • 最後に、カウントする(AJAX / 画像) リクエストをスプーフィングから保護するには、それぞれに 1 回だけ有効な一意の予測不可能なトークンを含めます。これを行う 1 つの方法は、トークンをランダムに生成し、トークンが返される (または古くなりすぎる) までデータベース (またはセッション ストレージ) に保存することです。

    または、トークンをデータベースに保存したくない場合は、タイムスタンプ (およびユーザーの IP アドレスなど) のMACを計算し、両方をリクエストと共に送信して、間違った MAC または古いタイムスタンプを持つリクエストを割引します。 .

于 2013-06-04T14:52:22.857 に答える