AntiSamyをためす

OWASPがAntiSamyというオープンソースのソフトウェアをリリースしました。

Category:OWASP AntiSamy Project - OWASP

ツールの名前は、有名なMySpaceJavaScript Wormからきています(多分)。

HTML断片から、JavaScript要素を除去するためのソフトで、現行版はJavaで作られています。プロジェクトのホームページによると、将来的にPHPや.NET環境にも移植される予定とのことです。

V1.0をダウンロードしてちょこっと触ってみました。

以下、メモ&感想です。

  • ParserとしてNekoHTMLを使用している。
  • XMLのポリシーファイルと、ポリシーファイルに基づいてHTMLを処理するエンジンで構成されている。
  • ポリシーファイルには、許可するHTMLタグ・属性名・属性値、CSSプロパティ名・値などのパターンを、正規表現をつかって定義可能。
  • サンプルのポリシーファイルが用意されている。AntiSamyを使う開発者は、サンプルを適宜自分のサイトの仕様(例えば、<B>,<I>,<U>しか許容しないなど)に合せて変更して使用する。
  • ポリシーファイルの定義次第で、「onclick="history.go(-1)" というJavaScriptだけは許可する」というように、柔軟な使い方ができる。
  • 一方で、AntiSamyを使う開発者がポリシーファイルのメンテを誤ると、簡単にXSS脆弱性を作り出してしまう危険性もある(現行のサンプルは正規表現の出来がいまいちで、XSSできてしまうという問題もある)。
  • 個人的には、ポリシーファイルに多くの事柄を盛り込みすぎだと感じる。①HTML/CSSの規格にHTMLを適合させる、②HTMLからJavaScriptを除去する、③HTMLを個々のサイトの仕様に合せる――この意味合いの異なる3つの事柄を、一緒くたにポリシーファイルに定義するデザインになっている。
  • 日本語のHTMLを食わせると文字化けした。ParserにHTMLを渡す辺りの処理がうまくない。

全体的には、PHPHTML Purifierの方がいいです。ただ、Javaで使えるこの手のソフトは少ないため、Java環境では選択肢の一つになりうるかなと思います。