web-dev-qa-db-ja.com

CORSが有効になっている機密のGETリクエストにはCSRF保護が必要ですか?

その他の質問 に基づいて、CSRFトークンでGETリソースを保護することは役に立たないようです。ただし、CORSが the mix にスローされると、すぐにそれは正しくなくなります。

サーバードメインserver.comclient.comにUIアプリがあります。 server.comドメインはユーザー認証を処理し、server.comドメインの下にセッションCookieを設定します。また、/user_dataでGETリクエストを処理し、有効なセッションを持つユーザーに機密ユーザーデータを返す、休息のようなエンドポイントもあります。 client.comのサードパーティUIは、AJAX呼び出しでuser_dataにアクセスする必要があるため、Originドメインの/user_dataエンドポイントでCORSが有効になっていますclient.com経由のAccess-Control-Allow-Origin

問題のエンドポイントは、サードパーティに機密データを提供しますが、副作用はありません。エンドポイントにCSRFトークン保護を実装する必要がありますか? (永続的なXSSを介して)侵害されたclient.com Webページによってuser_dataが読み取られる可能性はありますか?その場合、CSRF token交換のquery paramメカニズムを使用できますか? client.comserver.com Cookieに保存されているcsrfトークンを読み取ることができないため、私が理解しているように、これが唯一のオプションです。ただし、 OWASPガイドライン は次のように述べています。

トークンがサーバーログまたはURLにリークされていないことを確認してください。

それも問題である場合、アプリケーションをどのように保護できますか?

3
Leprechaun

cSRFトークンでGETリソースを保護することは役に立たないようです。

状態を変更するGETリクエストがある場合、それは役に立ちません(本来あるべきではありませんが、起こります)。

エンドポイントにCSRFトークン保護を実装する必要がありますか?

いいえ、状態を変更しない要求にはCSRF保護は必要ありません(ただし、適切な承認が必要になる場合があります)。

User_dataは、(永続的なXSSを介して)侵害されたclient.com Webページによって読み取られますか?

はい、client.comがCORS経由でserver.comからデータを読み取ることを許可すると、侵害されたclient.comもそのデータを読み取ることができます。

その場合、CSRFトークン交換のクエリパラメータメカニズムを使用できますか? client.comがserver.comのcookieに保存されているcsrfトークンを読み取ることができないため、私が理解しているように、それが唯一のオプションです。

いいえ、CSRF保護は役に立ちません。 client.comserver.comからCookieを読み取ることはできませんが、canclient.comで何かを読み取ります。また、CSRFトークンを知ってclient.comにリクエストを送信できるようにするには、server.comが必要です。

アプリケーションをどのように保護できますか?

client.comに危害を加えないでください。 client.com(セキュリティ侵害)がserver.comのデータにアクセスするのを防ぐと同時に、client.com(セキュリティが侵害されていない)にserver.comのデータへのアクセスを許可する他の方法はありません。区別される。

トークンがサーバーログまたはURLにリークされていないことを確認してください。

これを防ぐために、カスタムHTTPヘッダーでトークンを送信できます。ただし、client.comがすでに侵害されている場合に効果がない理由については、上記を参照してください。

2
tim