Develop and Download Open Source Software

OpenSource Downloads

7-Zip  (3,583)  
CrystalDiskInfo  (1,811)  
Tera Term  (1,787)  
HandBrake Japanese Language Version  (1,743)  
CrystalDiskMark  (980)  
FFFTP  (765)  
ffdshow  (719)  
mixfont-mplus-ipa  (615)  
MergeDoc  (571)  
10  TortoiseSVN  (555)  
11  Amateras  (437)  
12  BathyScaphe  (396)  
13  FreeMind  (372)  
14  Cabos  (327)  
15  ギコナビ  (316)  
More >>

悪意あるコードの侵入を阻止するツール、HTML Purifier

2008年09月08日 11:19 Ben Martin 1 2 3
 HTML Purifierは、HTMLの正当性を確保しクロスサイト・スクリプティングなどの悪意あるコードの侵入を阻止するツールだ。同プロジェクトのページPluginsには、現在、CodeIgniter、Drupal、MODx、Phorum、Joomla!、WordPress用のプラグイン類が用意されている。これを導入しておけば、利用者が、閲覧したブラウザーで実行される悪意あるコードをHTMLコンテンツに挿入することができなくなる。実際の動作をデモ・ページで確かめることもできる。

 HTML Purifierは、既知の悪意あるHTMLコードを探すブラックリスト方式ではなく、ホワイトリスト方式を採用している。したがって、正当なHTML文書を構成するすべてのパーツを明示的に指定する必要がある。どのようなコンテキストで何が許されるかは、Smoketestページで確認することができる。正当なHTMLとは何か、要素間の入れ子関係、各要素に付随するHTML属性として正当なものを明確に示すこともHTML Purifierの目的の一つなのだ。CSSにも対応しており、http://で始まるテキストを自動的にHTMLのhref要素に書き換えるといったことができる。HTML Purifierへの乗り換えを検討する場合は、各種HTML検証ツールと比較しているComparisonページが参考になるだろう。

 HTML PurifierはUbuntu、Fedora、openSUSE用のパッケージさえ提供しておらず、PEARを使ってインストールする。PEARによるインストールは高速で、最新版に移行するのも簡単(pear upgradeというコマンドを実行するだけ)。スクリプトにパスを指定する必要がないため、スクリプトにHTML Purifierを含めるのも容易だ。このほか、自分でソースからビルドできるようtarballが用意されている(tarballは、ドキュメントや依存するパッケージの収載の有無が異なる3種類が用意されている)。

 HTML PurifierをPEARを使ってインストールする場合は、まずphp-pearパッケージをインストールし、その後pearコマンドでHTML Purifierをインストールする。一例を下に示す。これはHTML Purifierを/usr/share/pear/HTMLPurifierにインストールする。

pear channel-discover htmlpurifier.org
pear install hp/HTMLPurifier

 筆者が試用したときは、この状態でHTML Purifierを使おうとするとエラーになった。Apacheのログ・ファイルを見ると、Cache.SerializerPathパスが存在しないとなっている。/usr/share/pear/HTMLPurifier/DefinitionCache/Serializerはコンテンツをキャッシュするためのパスで書き込み可能でなければならない。このエラーを回避するには、キャッシュしないようにするか(INSTALLファイルに詳しく説明されている)、/usrにディレクトリーを作って一時的なキャッシュとして使うか、あるいは/varに新しいディレクトリーを作ってここにキャッシュする。下に、最後の方法による場合の例を示す。

# mkdir -p /var/cache/HTMLPurifier
# chown apache /var/cache/HTMLPurifier
# chmod o-rwx /var/cache/HTMLPurifier
# ls -ld /var/cache/HTMLPurifier
drwxr-x--- 2 apache root 4096 2008-06-25 14:25 /var/cache/HTMLPurifier

 残念ながら、SerializerPathのデフォルト・パスはHTMLPurifier/ConfigSchema/schema.serの中に埋め込まれている。これは、テキストの冒頭にテキスト長を指定するタイプのファイルなので、人間が編集するにはあまり適していない。したがって、ご自分のPHPコードの構成オブジェクトを使ってパスを変更するか、もっといいのは、ご自分のWebサイト向けに構成オブジェクトを設定するPHP関数を作っておく。

最終更新:2008年11月08日 17:07
SourceForge.JP is a Japanese version of SourceForge.net. For developments that are not related to Japan, we recommend you to use SourceForge.net.