🐡

CSRF TOKENの設定は、CSRF対策だけでない!

2024/04/11に公開

CSRFとは

CSRFとは、webアプリケーションへのリクエスを偽造され、リクエスト送信者がユーザ本人か否かを確認すべき処理で発生する。

CSRF対策

TOKENを設定

clientは、 サーバにアクセスするとTOKENを発行する。そのTOKENをもっていないとアクセスできないため、悪意あるサイトはTOKENを持つことができない。そのため、悪意のあるサイトは、不正なリクエストを送っても鍵がないため実行がされない。

本題

CSRF TOKENの設定は、CSRF対策だけでなく、SESSIONを切れるタイミングを決めれる!!

サーバサイドのセッションストレージ (ブラウザのタブ、ウィンドウが閉じられるまで)

セッションストレージは、ウェブアプリケーションのサーバーサイドでトークンを保持する場所です。ユーザーのセッションごとに一意のCSRFトークンを生成し、セッションストア内に保存します。ユーザーがフォームを送信する際、送信されたトークンとセッション内のトークンを比較して検証します。これが一番安人安全

トークンをクッキーに保存し、それをクライアントサイドに送ります。ただし、この方法では、クロスサイトスクリプティング(XSS)攻撃に対して脆弱になる可能性があるため、HttpOnly属性をfalseに設定して、JavaScriptからアクセスできないようにすること一般的のため、あまりおすすめしない

変数に格納(ページごとにtokenを新しくする)

tokenが更新される頻度が多いため、セキュリティーは高い。しかし、tokenを毎回生成するため通信頻度が多くなり、コストがかかる。またuserはsessionがよく切れるためユーザビリティが落ちる。 Reactの相性

clientのセッションストレージとローカルストレージに保存する。

javaScriptを通じて簡単にアクセスできます。これらのストレージは、ページリロードや新しいタブでのアクセスに対して持続性が異なりますが、XSS攻撃に対して脆弱です。トークンをこれらのストレージに保存する場合、アプリケーションのXSS対策を強化する必要があります。

まとめ

scrf tokenはサーバーサイドのセッションストレージに保存せよ!

Discussion