CSRF TOKENの設定は、CSRF対策だけでない!
CSRF とは
CSRF とは、web アプリケーションへのリクエスを偽造され、リクエスト送信者がユーザ本人か否かを確認すべき処理で発生する。
CSRF 対策
TOKEN を設定
client は、 サーバにアクセスすると TOKEN を発行する。その TOKEN をもっていないとアクセスできないため、悪意あるサイトは TOKEN を持つことができない。そのため、悪意のあるサイトは、不正なリクエストを送っても鍵がないため実行がされない。
本題
CSRF TOKEN の設定は、CSRF 対策だけでなく、SESSION を切れるタイミングを決めれる!!
サーバサイドのセッションストレージ (ブラウザのタブ、ウィンドウが閉じられるまで)
セッションストレージは、ウェブアプリケーションのサーバーサイドでトークンを保持する場所です。ユーザーのセッションごとに一意の CSRF トークンを生成し、セッションストア内に保存します。ユーザーがフォームを送信する際、送信されたトークンとセッション内のトークンを比較して検証します。これが一番安人安全
cookie (cookie の期限が切れるまで有効)
トークンをクッキーに保存し、それをクライアントサイドに送ります。ただし、この方法では、クロスサイトスクリプティング(XSS)攻撃に対して脆弱になる可能性があるため、HttpOnly 属性を false に設定して、JavaScript からアクセスできないようにすること一般的のため、あまりおすすめしない
変数に格納(ページごとに token を新しくする)
token が更新される頻度が多いため、セキュリティーは高い。しかし、token を毎回生成するため通信頻度が多くなり、コストがかかる。また user は session がよく切れるためユーザビリティが落ちる。 React の相性
client のセッションストレージとローカルストレージに保存する。
javaScript を通じて簡単にアクセスできます。これらのストレージは、ページリロードや新しいタブでのアクセスに対して持続性が異なりますが、XSS 攻撃に対して脆弱です。トークンをこれらのストレージに保存する場合、アプリケーションの XSS 対策を強化する必要があります。
まとめ
scrf token はサーバーサイドのセッションストレージに保存せよ!
Discussion