私はStormpath(https://stormpath.com/blog/where-to-store-your-jwts-cookies-vs-html5-web-storage)の例に従って、WebサーバーにステートレスのJWTベースのユーザー認証システムを構築しました。GETリクエストによるCSRF攻撃に対するセキュリティ?
セットアップはCSRFに対して非常に安全だと思われますが、私はGETリクエストについてどう思っていますか?
<img>
タグを別のドメインのページに含めることで、GET要求に対するCSRF攻撃をモデル化できました。サーバーは、要求に200ステータスのフルページで応答します。 GETリクエストのデータは変更されませんが、ページには機密情報が含まれている可能性があります。たとえば、<img src="https://example.com/account" />
がユーザーの詳細を知らせる場合があります。<img src="https://example.com/logout" />
は単に迷惑なことをする可能性があります。
この<img>
の攻撃は、ブラウザがそれを取得した際の公開情報を公開しないため、無害とみなされますか? GETリクエストへのサーバーの出力を明らかにして機密情報を漏洩させる可能性のあるHTMLタグを悪用する他のトリックはありますか?
GET URLにJWTアクセストークンのハッシュを追加し、GETリクエストにそのハッシュが含まれていることをサーバーに要求し、そのCookieのJWTトークンと一致する必要があります。このようにして、攻撃者は有効なGET URLを推測することができません。そのようなGET URLを漏らすと、攻撃者はCookieから元のJWTを知らないため、サーバーにアクセスできなくなります。この設定はマイナーな使い勝手の問題とは別に、私には良いアイデアのように見えますが、似たようなものは見つかっていませんので、疑いがあります:)
ありがとうございました!ちょうど不思議なことに、攻撃者からGETへの応答が攻撃者に見えないことがどのように証明できるのでしょうか?証明にリンクできますか? – user1548418
https://www.owasp.org/index.php/Testing_for_CSRF_(OTG-SESS-005)をシミュレートし、ブラウザには犠牲者となるリクエストの起点を特定する情報HTTP_refererがあります。攻撃者ではなく、被害者によって悪意のあるスクリプトが起動されるためです。決して、リクエストイベントが発生した後、攻撃者は応答を見ることができません。 https://en.wikipedia.org/wiki/HTTP_referer –