DeXSSはJavaのアンチXSSライブラリです。掲示板やWebメールなどのアプリで、HTMLタグを許容しながら、JavaScriptを除去したい場面で使用します。
XSS攻撃対策用のライブラリ - DeXSS 1.0登場 | エンタープライズ | マイコミジャーナル
DeXSS -- Java program for removing JavaScript from HTML(DeXSS開発者のページ)
ちょっと触ってみました。
問題点
ソースを見たり、実際に使ってみると多くの欠陥が目に付きます。
ブラックリスト
まず最大の問題は、ホワイトリスト方式ではないことです。要素/属性名/属性値は、定義された正規表現(ブラックリスト)でフィルタされます。
実際に、style属性値のチェックが甘く、簡単にXSSできてしまいます。
出力されるHTMLが汚い
TagSoupのせいなのか、出力されるHTMLが汚いです。
■入力 <p>日本語</p> <br foo="bar"> ■出力 <p xmlns="http://www.w3.org/1999/xhtml">日本語</p> <br foo="bar" xmlns="http://www.w3.org/1999/xhtml"></br>
気になるのは、以下のようなところです。
・変な属性(br要素のfoo属性)が削除されない
・もれなくxmlns属性が追加されてしまう
・空要素(br)の表現がよろしくない
・非ASCII領域の文字が文字参照化される
設定ができない
どのようなHTML要素/属性を許可するなどは、ハードコードされています*1。変更するには、プログラムに手を入れなければなりません。
まとめ
現状では使えないと思います。現状はバージョン1.00がリリースされたばかりなので、今後に期待!と言いたい所ですが、根本的にアプローチを変える=全面的にプログラムを書き換える必要があると思いました。
誰かPHPの「HTML Purifier」をJava化してくれればよいのですが。
HTML Purifier - Filter your HTML the standards-compliant way!
T.Teradaの日記 - HTML Purifierを試した(2007/01/05)
*1:ソースのコメントには ToDo: Should be made more configurable などと書かれています。