JWTを使用する場合、CRSF攻撃から保護する必要はありません。たとえば、「 Cookieに依存していないため、クロスサイトリクエストから保護する必要はありません 」。
しかし、私が理解していないもの:トークンをlocalStorageに保存すると(同じウェブサイトのチュートリアルで (== --- ==)がアドバイスされたように )、攻撃者がクッキーの代わりにlocalStorageを読み取ることで悪意のあるリクエストを偽造しますか?
サーバー側で生成されたため、トークンをクライアントのどこかに保存せずにクライアントリクエストに使用する方法はわかりません。
厳密に言えば、はい、ローカル/セッションストレージ(これをHTML5ストレージと呼びます)に格納されているものはすべて、クロスサイトスクリプティング(XSS)攻撃で盗まれる可能性があります。 この記事 を参照してください。
ただし、検討すべき可動部分がたくさんあります。
まず、JavaScriptアクセスに関してHTML5ストレージとCookieのスコープが微妙に異なります。
HTML5ストレージは次のとおりです。
http://example.com
HTML5ストレージに保存されているアイテムには、https://example.com
で実行されているJavaScriptからアクセスできません。http://example.com
HTML5ストレージに格納されたアイテムは、http://sub.example.com
で実行されているJavaScriptからアクセスできません(ただし、これを回避するために tricks を実行できます)。クッキーはよりルーズグースです:
example.com
を持つCookieはhttp://example.com
とhttps://example.com
の両方に移動します-nless属性にはsecure
があり、その場合のみhttps
に送信されます。example.com
と明示的に定義されている場合、example.com
とsub.example.com
の両方に送信されます。 (これはCookie "spec"の最も混乱しやすい部分です。残念ながら、 この記事 を参照してください)。secure
Cookieフラグを尊重する)で実行されている場合、JavaScriptでCookieを読み取ることができますnless CookieのhttpOnly
属性は、その場合、JavaScriptはそれを読み取ることができません。第二に、Cookieはドメインでマークされているため、サーバーへのリクエストが行われると、ブラウザは一致するドメインを持つすべてのCookieを送信しますリクエストを発信したページのドメインに関係なく。
最後の部分は、CSRF攻撃がどのように達成されるかです(同じ起源のポリシーは非常に役立ちます)。 CSRFのOWASPページ は、これらの種類の攻撃がどのように機能するかを学習するための優れたリソースです。
認証トークンをローカルストレージに保存し、各リクエストに手動で追加してCSRFから保護する理由は、Word:マニュアルというキーです。ブラウザは自動的に認証トークンを送信しないため、evil.com
にアクセスし、POST http://example.com/delete-my-account
を送信できた場合、認証トークンを送信できないため、リクエストは無視されます。
上記を念頭に置いて、CookieまたはHTML5ストレージのどちらを使用するかは、一連のトレードオフになります。
認証トークンをHTML5ストレージに保存すると、次のことを意味します。
(-)
XSS攻撃で盗まれるリスク。(+)
CSRF保護を提供します。(-)
サーバーに送信される各リクエストを手動で変更し、SPA(AngularJs)Webアプリケーションに制限する必要があります。一方、httpOnly
andsecure
とマークされたCookieに認証トークンを保存する場合、次のようになります。
(+)
authnトークンはXSSによって盗まれません。(-)
自分でCSRF保護を提供する必要があります。一部のフレームワークでは、CSRF保護の実装が他のフレームワークよりも簡単です。どちらのオプションが良いかは、ニーズによって異なります。
httpOnly
secure
オプションが必要でしょう。トークンベースの認証を使用する場合、トークンをリクエストに手動で関連付ける必要があります。 Cookieとは異なり、トークンはブラウザによって自動的に設定されないため、csrf
攻撃の影響を受けません。
このアプローチはcsrf
攻撃から安全ですが、xss
攻撃を受けやすくなります。
最小限の労力での改善は、session storage
の代わりに local storage
以来session storage
ユーザーがタブ/ブラウザを閉じた後、データは削除されます。