web-dev-qa-db-ja.com

XHR(JavaScript)を使用してサードパーティのWebサイトフォームからCSRFトークンを取得する

CSRFトークンがCSRF攻撃を防ぐ最も安全な方法であると彼らが言っていることは知っていますが、誰かがXHRを使用してフォームと一緒にcsrfトークンを含むページを取得し、そのトークンを攻撃に使用した場合はどうなりますか?

彼らが「Referer」ヘッダーがCSRF攻撃を防ぐための最も安全な方法であると言わないのはなぜですか?結局のところ、現在使用中のブラウザのほぼ99%が「Referer」ヘッダーを提供し、攻撃者はとにかくそれを変更することはできません。 (はい、ブラウザ/ OS自体が侵害されない限り、彼はできません)

「リファラー」ヘッダーを使用してウェブサイトを保護したので、本当にcsrfトークンが必要ですか?私の重要なリクエストはすべて、GETメソッドではなくPOSTを使用しています。

3
AssassiN

...しかし、誰かがXHRを使用してcsrfトークンを含むページを取得した場合

このようなクロスサイトXHRの機能は、同一生成元ポリシーによって制限され、CORSによって拡張される可能性があります。 CORSが明示的にクロスサイト読み取りと資格情報(セッションCookie)の送信を許可しない場合、攻撃者がXHRを実行して、攻撃者が最初に応答を読み取ることができ、応答のCSRFトークンが関連付けられることはありません。既存のユーザーセッション。

言い換えると、サーバーが明示的に許可しない限り、提案されたクロスサイトXHRを通じて有用なCSRFトークンを取得することはできません。

3
Steffen Ullrich