0

我正在使用 antisamy 库来针对 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();
}

和:

断言失败:断言已清理.isEmpty() | | | 误报('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>>

粗体和斜体标签不知何故变得混乱 - antisamy 正确地剥离了损坏的标签,留下Hello World!正确的文本。在原始测试中保留一个看起来像 javascript 的纯文本无关紧要 - 有害<script>标签已被删除。

于 2014-01-07T00:37:20.950 回答