【要約】OWASP Cheat Sheet に見る CSRF 対策トークンの作り方 [Zenn_Python] | Summary by TechDistill
> Source: Zenn_Python
Execute Primary Source
// Problem
開発者は、CSRF対策でセッションにトークンを保存する際、サーバーのリソース負荷に直面する。
- ・セッション管理に伴うストレージコストの増大。
- ・大規模トラフィック時における検証のオーバーヘッド。
- ・セッション終了後のトークン無効化の管理コスト。
// Approach
開発者は、サーバー側に状態を持たないSigned Double-Submit Cookie方式を採用し、課題を解決する。
- ・事前にサーバー外に秘匿するsecretを生成する。
- ・CSPRNGを用いてランダムな文字列を生成する。
- ・HMACを用いて、random_strとsession_idを組み合わせた署名を算出する。
- ・Cookieに署名とrandom_strをセットして送出する。
- ・リクエスト時に受け取った値と、再計算したHMACを比較検証する。
// Result
この手法の導入により、開発者はサーバー負荷を抑えつつ、強固なCSRF対策を実現できる。
- ・サーバー側でのトークン保存が不要になり、スケーラビリティが向上する。
- ・session_idを署名に含めることで、ログアウト時にトークンを即時無効化できる。
- ・セキュリティ要件による頻繁なトークン更新にも柔軟に対応可能となる。
Senior Engineer Insight
> ステートレスな設計は、大規模分散システムにおいて極めて重要である。サーバー側の状態管理を減らし、スケーラビリティを確保できる。ただし、Cookieに値を置くため、XSS対策が必須条件となる。XSSが成立すれば、攻撃者はCookieを奪取し、対策を容易に突破できる。防御層としての設計を誤ってはならない。