PHPライブラリ「HTML Purifier」でXSS対策をする方法

XSS【クロスサイトスクリプティング】対策が簡単にできるPHPライブラリ「HTML Purifier」の利用方法をまとめました。これを使えばXSSの可能性がある危険なコードを簡単に削除することができます。

まずは「HTML Purifier」のDownloadからHTML Purifier 4.0.0をダウンロードします。
次に解凍してできたフォルダの中から「library」フォルダだけをサーバーにコピーします。
library/HTMLPurifier/DefinitionCacheにあるSerializerディレクトリを書き込み可能な属性に変更します。これで「HTML Purifier」が利用可能になります。

いつでも利用できるようにfunctionを用意します。

function hp($dirty_html) {
require_once('library/HTMLPurifier.auto.php'); //「library」フォルダがある場所を指定する
$config = HTMLPurifier_Config::createDefault();
$config->set('Core.Encoding', 'UTF-8');
$config->set('HTML.Doctype', 'XHTML 1.0 Transitional');
$purifier = new HTMLPurifier();
$clean_html = $purifier->purify( $dirty_html );
return $clean_html;
}

$configに文字コードやHTMLのタイプを指定します。
前回のPHPでReferer(リファラー)を残さないリンクを作る2を「HTML Purifier」を利用してXSS対策する場合は、先ほどのfunctionをコードに加え以下のようにします。

<?php
$link = hp($_GET['link']); //HTML Purifierを呼び出し危険なコードを削除します。
if(!empty($link)){
header("Refresh: 15; URL= $link");
}
?>
<html>
<head>
<title>のサイトから外部サイトへ移動します。</title>
</head>
<body>
ここから先はのサイトではありません、 外部のサイトに移動します。<br />
<a href="<?= $link ?>"><?= $link ?>を開く</a><br />
</body>
</html>

これでXSS対策をすることができます。
HTML PurifierはHTMLのコードも安全なものに自動で変換してくれるので、簡単なブログのような物にも利用することができると思います。

返信を残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です