0

XSS に対してアプリケーションへの入力をサニタイズするためにアンチサミー ライブラリを使用しています。次のようなネストされたタグに問題があります。

<<b>script>alert('xss');<</b>/script>

私の消毒方法は次のようになります。

    public String clean(String input) {
    if (input == null) {
        return null;
    }
    input = StringEscapeUtils.unescapeHtml(input);
    try {
        Policy policy = Policy.getInstance(getClass().getResourceAsStream("/antisamy-textonly-policy.xml"));
        AntiSamy antiSamy = new AntiSamy();
        CleanResults cleanResults = antiSamy.scan(input, policy);
        String cleaned = cleanResults.getCleanHTML();
        return StringEscapeUtils.unescapeHtml(cleaned);
    } catch (PolicyException e) {
         ....
    } catch (ScanException e) {
         ....
    }
}

このタイプの入力に対する私のテストは失敗しています:

    public void doubleTagTest() {
    def cleaned = xss.clean("<<b>script>alert('xss');<</b>/script>");
    assert cleaned.isEmpty();
}

と:

アサーションが失敗しました: assertcleaned.isEmpty() | | | | | false alert('xss');

at org.codehaus.groovy.runtime.InvokerHelper.assertFailed(InvokerHelper.java:386)
at org.codehaus.groovy.runtime.ScriptBytecodeAdapter.assertFailed(ScriptBytecodeAdapter.java:658)

再帰呼び出しなしでそれを処理する方法はありますxss.clean()か?

4

1 に答える 1

1

Antisamy は正しい結果を生成しています。不適切な形式のタグが削除され、プレーン テキストが残りますalert('xss');

次のことを考慮してください

<b<i>>Hello World!</b</i>>

太字とイタリック体のタグがどういうわけか混乱しています - アンチサミーは壊れたタグを正しく取り除き、Hello World!正しいテキストを残します。元のテストに javascript のようなプレーン テキストが残っていても問題ありません。有害な<script>タグは削除されています。

于 2014-01-07T00:37:20.950 に答える