3

我使用带有 Ebay 策略文件的 Owasp Anti samy 来防止对我的网站进行 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é”。

如何强制 antisamy 不将特殊字符转换为等效的 html 实体?

谢谢

PS:一个问题已被打开:http ://code.google.com/p/owaspantisamy/issues/detail?id=99

4

4 回答 4

3

今天早上我遇到了同样的问题。

我已经将反义词封装在一个类中,并使用来自 apache common-lang 的 apache StringEscapeUtil 来恢复特殊字符。

 CleanResults cleanResults = antiSamy.scan(taintedHtml);
 cleanedHtml = cleanResults.getCleanHTML();  
 return StringEscapeUtils.unescapeHtml(cleanedHtml)

结果是一个干净的 HTML,没有特殊字符的 HTML 转义。

希望这可以帮助。

于 2010-10-29T14:45:49.297 回答
2

就像 Mohamad 在评论中所说的那样,Antisamy 刚刚发布了一个名为:entityEncodeIntlChars 的新指令

这是详细信息:http ://code.google.com/p/owaspantisamy/source/detail?r=240

看来这个指令解决了这个问题。

于 2011-09-22T15:12:33.120 回答
0

在搜索了 AntiSamy 源代码后,我发现除了修改 AntiSamy 之外没有其他方法可以改变这种行为。

于 2010-08-23T08:07:12.467 回答
0

看看这个:http ://code.google.com/p/owaspantisamy/source/browse/#svn/trunk/dotNet/current/source/owaspantisamy/html/scan

获取源代码并注意关键类(AntiSamyDOMScanner、CleanResults)使用标准框架对象(如 XmlDocument)。使用您编译的二进制文件进行编译和运行——这样您就可以在调试器中看到所有内容——因为哪些主要类实际上会破坏您的数据。有了它,您将能够更改主要对象的一些属性以使其停止或注入您自己的后处理以恢复错误行为(例如使用正则表达式)。稍后您可以将其公开为附加的顶级属性,例如一个名为 NoMess 的属性 :-)

很可能在这方面的行为在语言之间是不同的(那个树干里有 3 个),但是无论你必须处理哪一个,相同的策略都会起作用。

于 2010-08-26T09:38:24.267 回答