requireAuthを使う際の注意

Securityコンポーネントを使ってCSRF対策を入れて見ていたのですが、requireAuthのチェック機構が予想以上に高機能でした。
ただ、高機能な分、使い方に注意しないとエラーにも・・・


一番驚いたのは、fieldsトークン。

トークンをパラメータとセッションに入れて受信先で確認、は予想してましたが、
フィールドの内容もトークン化して照合、フォームが改ざんされてないかまでチェックしてるとは・・・。


自身で別途、不正フィールドPOSTのunset対策入れてましたが、
requireAuth前提にすれば、それが要らなくなります ^^


フィールド確認のTokenは、$form->end();で自動生成してます。
ブラウザ上では

<div class="submit"><input type="submit" value="Submit" /></div>
<fieldset style="display:none;">
<input type="hidden" name="data[_Token][fields]" value="36455c34f04571122e57ab3f748cbe235e9d0930%3An%3A0%3A%7B%7D" id="TokenFields1664421361" />
</fieldset>
</form>

のように出力。

このタグを出力する時点でのフォーム内容からトークンを作成しているので、
ソースを保存、改ざんして送信するというハッキングができなくなっています。


つまり、Javascriptなどで動的に入力欄を増減させるのはできなくなっています ^^; (推論)


フォーム内容によっては、エラーになるかもしれません。RC時点?でのバグ報告。
http://cakephp.jp/modules/newbb/viewtopic.php?viewmode=flat&topic_id=1249&forum=9
http://cakephp.jp/modules/newbb/viewtopic.php?topic_id=1479&forum=9&viewmode=flat&order=ASC&start=0


うまく行かない場合は、
スパッと諦めてSecurityコンポーネントに依存しないCSRFチェックを導入した方が良さそうです。


便利だけど、切り離せるようにもしておこう・・・という印象。