【问题标题】:XSS sanitizing nested html tags inputXSS 清理嵌套的 html 标签输入
【发布时间】:2013-10-22 08:06:53
【问题描述】:

我正在使用 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();
}

与:

断言失败: 断言cleaned.isEmpty() | | |错误的 警报('xss');

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

您知道如何在不递归调用xss.clean() 的情况下处理它吗?

【问题讨论】:

  • 第二个 unescapeHtml 看起来很危险。

标签: java html security xss antisamy


【解决方案1】:

Antisamy 产生了正确的结果 - 格式错误的标签被删除,留下纯文本 alert('xss');

考虑以下

&lt;b&lt;i&gt;&gt;Hello World!&lt;/b&lt;/i&gt;&gt;

粗体和斜体标签不知何故变得混乱 - antisamy 正确地剥离了损坏的标签,留下文本 Hello World! 这是正确的。无需担心在原始测试中保留看起来像 javascript 的纯文本 - 有害的 &lt;script&gt; 标记已被删除。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-12-07
    • 2017-04-20
    • 1970-01-01
    • 2015-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-27
    相关资源
    最近更新 更多