[解決済み] ステートレス(=セッションレス)認証の場合、CSRFトークンは必要ですか?
質問
アプリケーションがステートレス認証 (HMAC のようなものを使用) に依存している場合、CSRF 保護を使用する必要がありますか?
例を挙げます。
-
シングルページのアプリを用意しました(そうでない場合は、各リンクにトークンを付加する必要があります。
<a href="...?token=xyz">...</a>
. -
ユーザが自分自身を認証するために
POST /auth
. 認証に成功すると、サーバは何らかのトークンを返します。 -
トークンはJavaScriptで単一ページアプリ内の変数に格納されます。
-
このトークンは、以下のような制限されたURLにアクセスするために使用されます。
/admin
. -
トークンは常にHTTPヘッダ内で送信されます。
-
Httpセッションも、Cookieもありません。
私が理解する限り、ブラウザがトークンを保存しないため、サーバーに自動的に送信することができないので、クロス サイト攻撃を使用する可能性はないはずです (これは Cookie やセッションを使用した場合に起こることです)。
何か見逃しているのでしょうか?
どのように解決するのですか?
CSRF + を使って、いくつかの情報を見つけました。 いいえ のクッキーを認証に使うという情報を見つけました。
-
https://auth0.com/blog/2014/01/07/angularjs-authentication-with-cookies-vs-token/
クッキーに依存していないため、クロスサイトリクエストから保護する必要はありません。 -
http://angular-tips.com/blog/2014/05/json-web-tokens-introduction/
"私たちがクッキーの道を行くなら、クロスサイトリクエストを避けるためにCSRFを本当に行う必要があります。これは、JWTを使用するときに忘れることができるものです。
(JWT = Json Web Token、ステートレス アプリケーションのためのトークン ベースの認証) -
http://www.jamesward.com/2013/05/13/securing-single-page-apps-and-rest-services
CSRF脆弱性のリスクを負わずに認証を行う最も簡単な方法は、ユーザーを識別するためにクッキーを使用しないことです"。 -
http://sitr.us/2011/08/26/cookies-are-bad-for-you.html
CSRFの最大の問題は、Cookieがこの種の攻撃に対する防御を全く提供しないことです。Cookie認証を使用する場合は、CSRFから保護するための追加の対策も採用する必要があります。最も基本的な予防策は、アプリケーションが GET リクエストに応答していかなる副作用も実行しないことを確認することです。
認証にCookieを使用しないのであれば、CSRF保護は必要ないと述べているページが他にもたくさんあります。もちろん、他のすべてのことにクッキーを使用することは可能ですが
を避けることができます。
のようなものを保存することは避けてください。
session_id
のようなものは入れないようにしましょう。
ユーザーを記憶する必要がある場合、2つのオプションがあります。
-
localStorage
: ブラウザ内のKey-Valueストアです。保存されたデータは、ユーザーがブラウザのウィンドウを閉じた後でも利用可能です。すべてのサイトが独自のストレージを取得するため、他のウェブサイトからデータにアクセスすることはできません。 -
sessionStorage
: 同じくブラウザ内のデータストアです。違いは ユーザーがブラウザのウィンドウを閉じたときにデータが削除されることです。しかし、あなたのウェブアプリケーションが複数のページで構成されている場合、それはまだ便利です。そのため、以下のようなことが可能です。
-
ユーザーがログインした後、トークンを
sessionStorage
- ユーザーがリンクをクリックすると、新しいページが読み込まれます (= a 実 リンクで、javascript の content-replace はありません)
-
トークンへのアクセスは
sessionStorage
-
ログアウトするには、トークンを手動で
sessionStorage
から削除するか、ユーザーがブラウザのウィンドウを閉じるのを待って、保存されているデータをすべてクリアします。
(両方については、ここをご覧ください。 http://www.w3schools.com/html/html5_webstorage.asp )
トークンオーサーの公式な標準はありますか?
JWT
(Json Web Token)です。まだドラフトだと思いますが、すでに多くの人が使っていて、コンセプトもシンプルで安全そうです。(IETFの
https://datatracker.ietf.org/doc/html/draft-ietf-oauth-json-web-token-25
)
また、多くのフレームワークに対応したライブラリがあります。ググってみてください。
関連
-
[解決済み] LDAPサーバをベースDNとする。
-
[解決済み] Google OAuth 2 認証 - エラー: redirect_uri_mismatch
-
[解決済み] なぜCSRF防止トークンをクッキーに入れるのが一般的なのですか?
-
[解決済み】JWTが盗まれたらどうする?
-
[解決済み】JWTをブラウザに保存する場所は?CSRFから保護する方法は?
-
[解決済み] トークン認証とCookieの比較
-
[解決済み] Refresh Token "の目的は何ですか?
-
[解決済み] クロスオリジンリクエストにCookieを設定する
-
[解決済み] マイクロサービス認証戦略
-
[解決済み] ステートレス(=セッションレス)認証の場合、CSRFトークンは必要ですか?
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] LDAPサーバをベースDNとする。
-
[解決済み] GitHub アカウントのユーザー名を変更する
-
[解決済み] Google OAuth 2 認証 - エラー: redirect_uri_mismatch
-
[解決済み】エンドポイントとは何ですか?
-
[解決済み】Cookieベースの認証はどのように機能するのですか?
-
[解決済み】JWTが盗まれたらどうする?
-
[解決済み] クロスオリジンリクエストにCookieを設定する
-
[解決済み] ステートレス(=セッションレス)認証の場合、CSRFトークンは必要ですか?
-
[解決済み] クロスドメイン認証のためのJWTを用いたシングルサインオンフロー
-
[解決済み] OpenIDとOAuthの比較 [重複]について