【发布时间】: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