web-dev-qa-db-ja.com

JWTは安全ですか?

プロジェクトのセキュリティのためにJWTについて学習していますが、質問があります。ログイン後にトークンを正しく受け取ったが、他の場所にいる他の誰か(ハッカー)がこの特定のトークンを盗んだ場合、彼は私のセッションにアクセスできますか? JWT認証を使用するサーバーはこれを検出して私を保護できますか?どうやって?

28
in3pi2

サーバーのみが、JWTの生成に使用される「秘密」を知っている必要があります。 JWTに含まれているデータを誰かが変更すると、サーバーはそのデータのデコードに失敗します。したがって、サーバーはデコードできるJWTを信頼できます。

ただし、ハッカーがコンピューターにアクセスした場合、ハッカーはブラウザーに格納されているJWTを確認して使用できます。これと同じ脅威がcookieに存在するため、実際にはJWTの欠陥ではありません。

この脅威を軽減する1つの方法は、JWTの有効期限です。バンキングアプリの場合、JWTは数分後に期限切れになることがあります。 Facebookの場合、数か月後に有効期限が切れる可能性があります。ただし、誰かがあなたのブラウザにアクセスした場合、これに対する完全な解決策はありません。

ハッカーのもう1つのアプローチは、クライアントとサーバー間のネットワークトラフィックを傍受してCookie/JWTに到達する「中間者攻撃」です。これを防ぐには、cookie/JWTを常にHTTPS経由で送信する必要があります。

重要な編集

最後に、タイトルの質問「JWTはどれくらい安全ですか」に答えるには、トークンの格納方法によって異なります。ローカルストレージはCookieを使用するほど安全ではありません( 参照 )が、Cookieは CSRFまたはXSRF の悪用の対象になる可能性があります。

この回答は、CookieがCSRF攻撃の対象となったため、JWTはCookieよりも安全であると言っていました。しかし、JWTをローカルストレージに保存することも安全ではありません。その結果、JWTをローカルストレージに保存しなくなり、よく知られた手法を使用してCSRF攻撃を緩和しています。

47
Sunil D.