JWT は localStorage または cookie に保存する必要がありますか? [重複] 質問する

JWT は localStorage または cookie に保存する必要がありますか? [重複] 質問する

JWTを使用してREST APIを保護する目的で、いくつかの資料(このガイドこの質問)、JWTは次のいずれかに保存できます。ローカルストレージまたはクッキー私の理解によれば:

  • ローカルストレージXSS の影響を受けるため、通常は機密情報を保存することは推奨されません。
  • クッキーXSS のリスクを軽減するフラグ「httpOnly」を適用できます。ただし、バックエンドで Cookie から JWT を読み取る場合は、CSRF の対象となります。

したがって、上記の前提に基づくと、JWT を Cookie に保存するのが最善です。サーバーへのすべてのリクエストで、JWT は Cookies から読み取られ、Bearer スキームを使用して Authorization ヘッダーに追加されます。その後、サーバーはリクエスト ヘッダー内の JWT を検証できます (Cookie から読み取るのではなく)。

私の理解は正しいでしょうか? もしそうなら、上記のアプローチにはセキュリティ上の懸念がありますか? それとも、そもそも localStorage を使用すれば済むのでしょうか?

ベストアンサー1

私は、@pkid169 が述べた記事で言及されている XSRF Double Submit Cookies メソッドを気に入っていますが、その記事では説明されていないことが 1 つあります。攻撃者が実行できるのは、CSRF Coo​​kie (HttpOnly ではない) を読み取るスクリプトを挿入し、この CSRF トークンを使用して API エンドポイントの 1 つにリクエストを送信し、JWT Cookie が自動的に送信されるため、XSS からはまだ保護されていません。

したがって、実際には、XSS の影響を受ける可能性は依然としてあります。攻撃者は、後で使用するために JWT トークンを盗むことはできませんが、XSS を使用してユーザーに代わってリクエストを行うことはできます。

JWT を localStorage に保存する場合でも、XSRF トークンを http 専用ではない Cookie に保存する場合でも、どちらも XSS によって簡単に取得される可能性があります。HttpOnly Cookie 内の JWT であっても、高度な XSS 攻撃によって取得される可能性があります。

したがって、Double Submit Cookies メソッドに加えて、コンテンツのエスケープを含む XSS に対するベスト プラクティスに常に従う必要があります。つまり、ブラウザーに望ましくない動作を実行させる実行可能コードをすべて削除するということです。通常、これは JavaScript の評価を引き起こす // <![CDATA[ タグと HTML 属性を削除することを意味します。

おすすめ記事