cakephp2では、xss(クロスサイトスクリプティング)対策でh関数というものが定義されています。
どこに定義されているのかは、
lib/Cake
配下の
basic.php
に定義されています。
以下のような関数です。
function h($text, $double = true, $charset = null) { if (is_string($text)) { //optimize for strings } elseif (is_array($text)) { $texts = array(); foreach ($text as $k => $t) { $texts[$k] = h($t, $double, $charset); } return $texts; } elseif (is_object($text)) { if (method_exists($text, '__toString')) { $text = (string)$text; } else { $text = '(object)' . get_class($text); } } elseif (is_bool($text)) { return $text; } static $defaultCharset = false; if ($defaultCharset === false) { $defaultCharset = Configure::read('App.encoding'); if ($defaultCharset === null) { $defaultCharset = 'UTF-8'; } } if (is_string($double)) { $charset = $double; } return htmlspecialchars($text, ENT_QUOTES, ($charset) ? $charset : $defaultCharset, $double); }
なぜh関数を使う必要があるのか。
例えば
<?= '<script>alert("aaa")</script>' ?>
だと、javascriptのalertが実行されて、ウインドウが立ち上がりaaaと表示されてしまいます。
<?= h('<script>alert("aaa")</script>') ?>
とサニタイズ(無害化)してあげると、javascriptは実行されずにそのまま表示されます。