2008年1月3日木曜日

 

フォーム要素でHTMLタグを許可したいときのXSS・JavaScript対策

HTML Purifier
デモペ-ジ
インストール方法

デモページはテキストエリアにウェブページのソース(HTML,CSS,JavaScript混合のテキスト)を入力して「Submit」。デフォルトではJavaScriptだけ(<script>やonClickなど)が取り除かれる。
HTMLタグを個別に許可したい場合は、右側「HTML-> Null/Disabled」のチェックを外して、Allowedに許可タグを入力。
形式は以下のようにカンマ区切りで、[]内に許可する属性を指定。


a[href|title],p[id|class],b,i,ul,li

実際にプログラムで使う場合。
ダウンロードしたファイルをサーバにアップし、以下のコードで呼び出す。
例はアップしたフォルダを「htmlpurifier」とした。
「htmlpurifier/library/HTMLPurifier/DefinitionCache/Serializer/」内にあるディレクトリの属性を全て書き込み可能(0777or0707)にしておく。


require_once 'htmlpurifier/library/HTMLPurifier.auto.php';

使い方は以下。$pure_htmlにはJavaScriptが取り除かれたhtmlテキストが入る。


$config = HTMLPurifier_Config::createDefault();

$purifier = new HTMLPurifier($config);

$html = mb_convert_encoding(file_get_contents("index.html"),"UTF-8");

$pure_html = $purifier-> purify($html);

個別でタグを指定する場合は以下。


$purifier = new HTMLPurifier(array(
            'HTML.AllowedElements' => array('b', 'i', 'p', 'a','ul','li'),
            'HTML.AllowedAttributes' => array('a.href', '*.id'),
        ));
$pure_html = $purifier->purify($html);

スタイル属性での@importやbackground-urlの値がURLだと消去される模様。

参考としては、「docs/examples/basic.php」が一番シンプルな雛型。
使い方や他の機能に関しては「tests/」内の「HTMLPurifierTest.php」「index.php」のテスト用クラスを参考。

ラベル: , , ,


コメント: コメントを投稿

登録 コメントの投稿 [Atom]



この投稿へのリンク:

リンクを作成



<< ホーム

This page is powered by Blogger. Isn't yours?

登録 投稿 [Atom]

Google