🐡

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 はサーバーサイドのセッションストレージに保存せよ!

GitHubで編集を提案

Discussion