web-dev-qa-db-ja.com

localstorage / sessionstorageを使用してCSRF攻撃を防ぐことはできますか?

ログインして使用する必要があるフロント/バックアプリケーションがあります。ログインすると(フロントエンドアプリがリクエストをバックエンドに送信することにより)、Cookieを送信するのではなく、トークンを含むJSONを送信します。後者は、フロントエンドアプリによってsessionstorageに格納され、バックエンドとやり取りするたびに、sessionstorageに格納されているトークンと共にリクエストを送信します。バックエンドはトークンの有効性を検証します。

このソリューションはCSRF安全だと思いますか?検討/無視していない他の脆弱性はありますか?

7
Bertuz

CSRFの場合はCookieを使用するよりも確かに安全ですが、XSSの場合はセッションストレージをJavaScriptから読み取ることができるのに対し、http専用のCookieを使用することはできないため、安全性は低くなります。
それは、XSSに対する保護についてどれだけ自信があるかに依存します。

このアプローチを採用する場合は、ベアラースキームでAuthorizationヘッダーを使用することをお勧めします。

Authorization: Bearer <token>

その他の注意事項:

  • セッションストレージはタブ間で共有されません。
  • この方法は、認証が必要な画像には使用できません。それらについては、引き続きCookieを使用できます(他のすべてのエンドポイントのCookieを無視し、Cookieのパスを画像のみが見つかるパスに制限することを確認してください)
5
Bart van Wissen