その他の質問 に基づいて、CSRFトークンでGETリソースを保護することは役に立たないようです。ただし、CORSが the mix にスローされると、すぐにそれは正しくなくなります。
サーバードメインserver.com
とclient.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.com
はserver.com
Cookieに保存されているcsrfトークンを読み取ることができないため、私が理解しているように、これが唯一のオプションです。ただし、 OWASPガイドライン は次のように述べています。
トークンがサーバーログまたはURLにリークされていないことを確認してください。
それも問題である場合、アプリケーションをどのように保護できますか?
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.com
はserver.com
からCookieを読み取ることはできませんが、canclient.com
で何かを読み取ります。また、CSRFトークンを知ってclient.com
にリクエストを送信できるようにするには、server.com
が必要です。
アプリケーションをどのように保護できますか?
client.com
に危害を加えないでください。 client.com
(セキュリティ侵害)がserver.com
のデータにアクセスするのを防ぐと同時に、client.com
(セキュリティが侵害されていない)にserver.com
のデータへのアクセスを許可する他の方法はありません。区別される。
トークンがサーバーログまたはURLにリークされていないことを確認してください。
これを防ぐために、カスタムHTTPヘッダーでトークンを送信できます。ただし、client.com
がすでに侵害されている場合に効果がない理由については、上記を参照してください。