2016-10-25 6 views
2

私の質問を読んでくれてありがとう!私は今日JWTについて研究してきました。もともと私は、JWTがhttpOnlyのクッキー(サーバーによってのみ発行可能)に格納されていない限り、JWTが2つの主な種類の攻撃に対して公開されているという現代的なコンセンサスを考えました。JWT - それらをLocalStorageとSessionStorageに保存する

背景:

は、しかし、私はハッカーがそれをトークンへのアクセスを取得し、デコードする場合限り、あなたはJWTペイロード内の任意のユーザの機密情報を入れないように、それは大丈夫だと、今日学びましたなぜなら、せいぜいユーザーの一意のIDだけを表示するからです。サーバーがJWTを検証し、ペイロードのサブキーのIDを取得すると、ユーザーのパスワードやその他の機密情報をサーバー上で取得することができます。

しかし、ハッカーがトークンのMIDリクエスト/レスポンスを傍受し、トークンが期限切れにならない場合、何が起こるかについてはまだ100%明確ではありません。私の理解では、ハッカーはユーザーのアカウントにアクセスしてユーザーのページをめちゃくちゃにすることができ、ユーザーが自分のパスワードをリセットしても、トークンをハッカーから取り消すことはできません。トークンを持っていて、サーバーが意図したユーザーではないことを認識するほどスマートではありません。


はとにかく、私は(私は唯一のAPIとしてバックエンドサーバを使用していますので、私はHttpOnlyのクッキー、またはそのことについては、クッキーを使用することはできません、それはプログラムが直面している私のフロントエンドクライアントにクッキークロスサーバーを提供することができないことを実現します例えば、反作用)。

この場合、認証JWTを保存する場所は2つしかないようです:LocalStorage、またはSessionStorage ...ブラウザを閉じることでトークンが破棄されないという事実のために、ほとんどの人がLocalStorageに行くと思います。

私の主な質問はこれです:

がのlocalStorageかのsessionStorageはJWTを格納するための唯一の「合理的な」場所であるということなので、一つの他よりも安全、そしてなぜですか?

感謝!

答えて

5

SessionStorageの両方がsame specificationに定義されています。これらの違いは、各店舗に置かれているデータの寿命にすぎません。

セキュリティの観点からは、ほとんど同じですです。 SessionStorageはセッションを終了するユーザーのライフタイムと自動クリーンナップが短いので、それはやや安全ですが、それはそれだと主張することができます。また、ブラウザを閉じてもセッションストレージの内容が破壊されることはないことに注意してください。セッション記憶域は閲覧コンテキストの存続期間に結びついています。

仕様は明らかにこのノート:

ユーザエージェントは再起動後にセッションを再開サポートすることが可能とブラウジング・コンテキストの寿命は、実際のユーザー・エージェント・プロセス自体の寿命とは関係のないことができます。

(強調は私です)

あなたは既にによる特定の要件にクッキーを除外していますが、保存するトークンのクライアント側のセキュリティの考慮事項について少し詳細をお知りになりたい場合は、お読みくださいトークンをどこに保管しますか?のセクションはCookies vs Tokens: The Definitive Guideです。あなたが言ったトークンへの攻撃者のアクセスは、ほとんどがtrueの場合、トークンは、要求を許可するために必要な唯一のものよりもベアラートークンとして知られているものであれば、何が起こるかに関連して


は知っていますトークン。つまり、サーバーはトークンを持つすべてのユーザーからの要求を受け入れます。このため、漏れの影響を最小限に抑えるために、トークンの寿命を短くすることをお勧めします。

関連する問題