HTML の入力を許容するケースでの、 XSS 対策として。
徳丸本 P117 に紹介されている HTML Purifier を利用。
html_purifier.php
<?php
require_once('$PATH_TO_LIBRARY/HTMLPurifier.includes.php');
use HTMLPurifier;
use HTMLPurifier_Config;
function sanitize($tainted_html) {
$config = HTMLPurifier_Config::createDefault();
$config->set('Cache.SerializerPath', $PATH_TO_TEMPORARY_DIR);
$purifier = new HTMLPurifier($config);
return $purifier->purify($tainted_html);
}
バージョンは Version 4.5.0 でした。
Cache.SerializerPath には、書き込み権限のあるディレクトリを指定すること。
キャッシュを利用したくない場合は、 Cache.DefinitionImpl に null を指定することもできるが、パフォーマンスが落ちるとのこと。
その他細かい設定は http://htmlpurifier.org/live/configdoc/plain.html を参照。
include には、 HTMLPurifier.auto.php を使うこともできるけど、
オペコードキャッシュ利用してるなら HTMLPurifier.autoload.php でなくHTMLPurifier.includes.php 使ってもいいんじゃないかな。
HTMLPurifier_Bootstrap::registerAutoload とか泣ける。。。