web-dev-qa-db-ja.com

Same-Originポリシーが適用されている場合、AjaxリクエストはCSRF攻撃に対してどのように脆弱ですか?

CSRFについて私が知っていることは、悪意のあるWebサイトが通常のユーザーをだまして、フォームを使用して信頼できるWebサイトにリクエストを発行することです。

フォームを別のドメインに投稿できるため、それが可能であることを理解しています。ただし、Stackoverflowの投稿には、トークンを使用してAJAXリクエストも保護する必要があるとの記述があります。

Same-Originポリシー AJAXリクエストは、スクリプトのロード元のドメインにのみ発行されるように強制しませんか?

Cross-Origin resource sharing について聞いたことがありますが、私の理解が正しければ、それを有効にするためにWebサーバーが必要なので、通常のサーバーではそのようなリクエストを許可しないでください。

15
Songo

リクエストは引き続き送信できます 読み取られない

  • 通常、クロスオリジン書き込みが許可されています。例は、リンク、リダイレクト、フォームの送信[原文のまま]です。
  • 通常、クロスオリジン読み取りは許可されていません。

したがって、CORSなしでクロスドメインで使用できるのは特定のヘッダーのみですが、応答の読み取りだけが要求自体の作成ではなく、同一生成元ポリシーによって保護されます。たとえば、次のヘッダーのみが許可されます。

  • 受け入れる
  • 受け入れ言語
  • コンテンツ言語
  • 最終イベントID
  • コンテンツタイプ

X-Requested-With などのその他は許可されないため、カスタムヘッダーの存在は、リクエストがクロスドメインまたは非AJAXフォームから作成されていないことの検証として確認できます。

古いバージョンのフラッシュには ヘッダーの設定 を許可する脆弱性があり、通常はブラウザーによって制限され、 別の脆弱性 がクロスドメインリクエストを許可することに注意してください。リクエストを許可するために有効なcrossdomain.xmlなしで作成されるため、 トークンベースのアプローチ は、最も安全な防止方法である可能性があります [〜#〜] csrf [〜# 〜]

17
SilverlightFox