サーバーサイドから値をブラウザにそのまま表示させるとjavascriptなど不正なコードを実行してしまう危険性があるため、前もって値をサーバー側でサニタイズする必要があります。

そこでコントロール側のプログラムでset時に毎回サニタイズするのはアホらしいのでsetメソッドをオーバーライドして、意識しなくても自動的にサニタイズされるようにしました。

/cake/libs/controller/app_controller.phpを以下のように編集。

class AppController extends Controller {
/*setメソッドをオーバーライド*/
	public function set($var, $val = null, $sanitize = true)
	{
		if ($sanitize) {
			 $val = $this->__sanitize($val);
		}
		return parent::set($var, $val);
	}
/*サニタイズメソッド*/
	private function __sanitize($dat){
		if (is_array($dat)) {
			foreach ($dat as $cnt=>$val) {
				$dat[$cnt] = $this->__sanitize($val);
			}
			return $dat;
		} else {
			return htmlspecialchars($dat);
		}
	}

}

逆にset時にサニタイズしたくない場合は3番目の引数にfalseを指定すればそのまま出力してくれます。

$this->set('auth',$this->Auth->user(),false);