FuelPHPでCSRF対策
ウェブアプリケーションフレームワークFuelPHPにはSecurityパッケージにCSRF対策用の便利なツールが入っているので、 特にこだわりがなければ以下の点に注意して使っておくと良い。
- 副作用のある操作でCSRF対策を施す
- フォームへの埋め込みだけ施してpost先での検証を忘れないように注意(ありがち)
- ログアウト処理には使わなくても害は無い
- Configで十分に長く複雑なsaltを設定する
FuelでのCSRF対策機能の仕組み
Fuelのソースを確認した限りでは、以下のような仕組みのようだ。
- fetch_tokenでCookieにcsrfのtokenの大元を生成&クライアント側にset
- 大元のtokenはFuelサーバー内セッションストレージに保存される訳ではない
- フォーム用としてsaltを付けてハッシュ化された値を生成、それをformのhiddenにセットすることを想定
- クライアントがpostすると、hiddenのtokenの値と最初に生成した大元のtokenをrequest headerに含めて送信
- Fuelサーバーはhiddenのtokenと、cookieで送信されたcsrfの大元の値にsalt付きハッシュを通した値を比較
- 一致していればクライアントからの正当なリクエストと判定
- saltはサーバー側でしか保持しないため、改ざんやリバース生成は事実上不可能
- 大元token生成アルゴリズム(generate_tokenファンクション)に一部mt_randが使われているが、time(),uniqid(),salt,sha512を併用しているため実質的に安全であるものと思われる。
- saltはクライアントごとに固有の値を持たせるのではなく、Fuelサーバーで共有されたものを一つだけ持つ
fetch_tokenの計算コストは無視でき、また、サーバー側ではhash前のtokenを保持しないのでかなり低コストである。
next: PerlのOpenSSLモジュールで電子署名
updated at : 2020-01-24 10:00:27
author : Toshiaki Yokoda