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