いわゆるCSRF対策のメモです。
Webでのデータ登録には
入力 → 確認 → 完了 という3つのフェーズで行うのが一般的です。
中でも最後の「完了」でデータ登録を行うことが多いため、
このページでリロードを行われると重複登録になったり、
前2フェーズを飛ばして不正なフォームをPOSTしてくるなどの
対策をする必要があります。
今まではセッションを使うなどして自前でコードを書く必要がありましたが、
FuelPHPでは Securityクラスを使うことで簡単に行えます。
確認画面のフォーム部分に下記を追加します。
echo Form::hidden( Config::get('security.csrf_token_key'), Security::fetch_token() );
下記のような隠し項目が書き出されます。
<input name="fuel_csrf_token" value="8af49a49ef926ca20fb713542c258fb4" type="hidden" id="form_fuel_csrf_token" />
そして登録を行うコントローラーで下記のように振り分けます。
if( !Security::check_token() ){ // エラー表示 }else{ // 正常なデータ登録 }
下記のサイトでは様々なセキュリティ対策について書かれてます。
[…] [FuelPHP]画面リロードや不正なフォーム登録を防ぐ […]
ピンバック by [FuelPHP]セッションをクッキーからファイルやDBに変更する 》 RuputerFan — 2012年2月10日 @ 4:32 AM