[解決済み] JWTはlocalStorageとcookieのどちらに保存するべきか?重複
質問
JWTを使ったREST APIのセキュリティ確保のために、いくつかの資料(例えばこんな感じ ガイド や、この 質問 を含む)、JWTは以下のどちらかに格納されます。 ローカルストレージ または クッキー . 私の理解に基づいています。
- ローカルストレージ は XSS の対象となります。一般に、機密情報をそこに保存することは推奨されません。
- で クッキー を使えば、XSS のリスクを軽減する httpOnly" のフラグを適用することができます。しかし、バックエンドでクッキーからJWTを読み取る場合、CSRFの影響を受けることになります。
ですから、上記の前提に基づいて、JWT を Cookie に保存するのが最善でしょう。サーバーへのすべてのリクエストで、JWT は Cookie から読み取られ、Bearer スキームを使用して Authorization ヘッダーに追加されます。そうすれば、サーバーは(Cookieから読み取るのとは対照的に)リクエストヘッダでJWTを検証することができます。
私の理解は正しいでしょうか?もしそうなら、上記のアプローチにはセキュリティ上の懸念があるのでしょうか?あるいは、実際には、最初の場所でlocalStorageを使用することで済ませることができるのでしょうか?
どのように解決するのですか?
私は@pkid169が言った記事で言及されているXSRF Double Submit Cookiesの方法が好きですが、その記事には書かれていないことが1つあります。攻撃者ができることは、CSRF クッキー (HttpOnly ではないもの) を読み取るスクリプトを注入し、JWT クッキーが自動的に送信される CSRF トークンを使用して API エンドポイントの 1 つにリクエストを送信することだからです。
攻撃者が後で使用するためにJWTトークンを盗むことができないだけで、XSSを使用してユーザーに代わってリクエストを行うことは可能です。
JWTをlocalStorageに保存しても、XSRF-tokenをhttp専用のcookieに保存しても、どちらもXSSによって簡単に取得されます。HttpOnly クッキーにある JWT でさえ、高度な XSS 攻撃によって捕捉される可能性があります。
したがって、Double Submit Cookiesの方法に加えて、コンテンツのエスケープなど、XSSに対するベストプラクティスに常に従わなければなりません。これは、ブラウザに不要な動作をさせる実行可能コードをすべて削除することを意味します。典型的には、これは // <![CDATA[] タグと JavaScript が評価される原因となる HTML 属性を削除することを意味します。
関連
-
[解決済み] SSLエラー: ローカルの発行者証明書を取得できない
-
[解決済み] HTML5のlocalStorageにオブジェクトを格納する方法は?
-
[解決済み] 後で平文を取り出すためのユーザーパスワードの保管について、倫理的にどのように取り組むべきでしょうか?
-
[解決済み] jQueryでクッキーを設定/解除するにはどうすればよいですか?
-
[解決済み] javascriptでlocalStorageをクリアする?
-
[解決済み] localStorage、sessionStorage、session、cookieの違いは何ですか?
-
[解決済み] なぜCSRF防止トークンをクッキーに入れるのが一般的なのですか?
-
[解決済み】JWTをブラウザに保存する場所は?CSRFから保護する方法は?
-
[解決済み] パスワードのハッシュ化と暗号化の違いについて
-
[解決済み】セッションは本当にRESTfulnessに違反するのか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】攻撃者はinspect要素を有害に使用することができるか?
-
[解決済み] CloudflareでオリジンIPアドレスの公開を防ぐには?
-
[解決済み] HTTPS(HTTP + SSL)において、クエリストリングパラメーターは安全ですか? [重複している]。
-
[解決済み] 認証とセッション管理に関するSPAのベストプラクティス
-
[解決済み】JWTをブラウザに保存する場所は?CSRFから保護する方法は?
-
[解決済み] HTTP_REFERERはどのような場合に空になるのでしょうか?
-
[解決済み] reCaptchaはクラックされましたか?[クローズド]
-
[解決済み] チェックボックスリキャプチャの仕組みと使い方を教えてください。
-
[解決済み] 分散ブルートフォースへの最適な対策は?
-
[解決済み] JWTはlocalStorageとcookieのどちらに保存するべきか?重複