我使用Owasp Anti samy和Ebay政策文件来阻止我网站上的XSS攻击。
我还使用Hibernate搜索来索引我的对象。
当我使用此代码时:
String html = "special word: été";
// use the Ebay configuration file
Policy policy = Policy.getInstance(xssPolicyFile.getInputStream());
AntiSamy as = new AntiSamy();
CleanResults cr = as.scan(html, policy);
// result is now : "special word: été"
result = cr.getCleanHTML();
正如你所看到的,所有字符“é”都已转换为他们的html实体等效“é
”
我的页面是UTF-8,所以我不需要这种转换。此外,当我用Hibernate Search索引这个文本时,它用html实体索引这个单词,所以我在索引上找不到单词“été”。
如何强制反歧义不将特殊字符转换为与其等效的html实体?
感谢
PS:问题已经打开:http://code.google.com/p/owaspantisamy/issues/detail?id=99
答案 0 :(得分:2)
今天早上我遇到了同样的问题。
我在一个类中封装了antisamy,我使用apache common-lang中的apache StringEscapeUtil来恢复特殊字符。
CleanResults cleanResults = antiSamy.scan(taintedHtml);
cleanedHtml = cleanResults.getCleanHTML();
return StringEscapeUtils.unescapeHtml(cleanedHtml)
结果是清理了HTML而没有HTML转义特殊字符。
希望这有帮助。
答案 1 :(得分:2)
就像Mohamad在评论中所说,Antisamy刚刚发布了一个名为:entityEncodeIntlChars的新指令
这里是详细信息:http://code.google.com/p/owaspantisamy/source/detail?r=240
这条指令似乎解决了这个问题。
答案 2 :(得分:0)
在搜索AntiSamy源代码之后,除了修改AntiSamy之外,我发现无法改变这种行为。
答案 3 :(得分:0)
抓住源代码并注意到关键类(AntiSamyDOMScanner,CleanResults)使用标准框架对象(如XmlDocument)。编译并运行您编译的二进制文件 - 这样您就可以在调试器中查看所有内容 - 就像在哪些主要类中实际破坏您的数据一样。有了这些,您将能够更改主要对象上的一些属性以使其停止或注入您自己的后处理以恢复错误行为(例如使用正则表达式)。稍后您可以将其公开为额外的顶级属性,例如名为NoMess的属性: - )
有可能在这方面的行为在不同语言之间是不同的(在那个主干中有3个)但是无论你需要处理哪一个,相同的策略都会有效。