ビューにデータを渡すメソッドですが、全くサニタイズされないようなので、AppController でオーバーライドして使っています。
<?php /** * 自動サニタイズ機能付き set() メソッド * * @param string $var セットする変数名 * @param mixed $val 値 * @param boolean $sanitize サニタイズするかどうか * @return mixed parent::set()呼出結果 * @access public */ function set($var, $val, $sanitize = true) { if ($sanitize) { $val = sanitize($val); } return parent::set($var, $val); }
で、どこかで sanitize() 関数を定義しておきます。
もしくは、コンポーネントかなんかのメソッドで。
<?php /** * htmlspecialchars() を再帰的に実行する * * @param mixed $dat 対象データ * @return mixed サニタイズされたデータ */ function sanitize($dat) { if (is_array($dat)) { return array_map('sanitize', $dat); } else { return htmlspecialchars($dat); } }
モデルの findAll() と find() もセキュリティ上問題あるので、オーバーライドしておきたいと思っていたりします。