我使用epay策略文件使用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搜索索引此文本时,它索引了与HTML实体的单词,因此我无法在我的索引上找到“été”。

如何强迫抗杀死不会将特殊字符转换为他们的HTML实体等同物?

感谢

ps:一个问题已打开: http://代码.Google.com / P / OWASPANTISAMY /问题/细节?ID= 99

有帮助吗?

解决方案 2

就像Mohamad一样在评论中说,Anti isamy刚刚发布了一个名为Namedive的新指令

这里是详细信息: http://code.google.com/ P / OWASPANTISAMY /源/细节?r= 240

似乎这个指令解决了这个问题。

其他提示

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

我在课堂上封装了anti isamy,我使用apache stribecapeutil从apache common-lang恢复特殊字符。

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

结果是清理的HTML,没有特殊字符的HTML逃避。

希望这有帮助。

浏览抗溃疡源代码后,我发现除了修改抗肌驼外,我找不到改变这种行为。

检查这个: http://code.google.com/p/owaspantisamy/source/browse/#svn/trunk/dotnet/current/source/ouraspantisamy/html/scan

抓取源头并注意到关键类(anti isamydomscanner,cleanResults)使用标准框架对象(如xmldocument)。编译和运行您编译的二进制文件 - 以便您可以在调试器中看到所有内容 - 如在哪个主要类中实际损坏您的数据。用它可以在手中更改主要对象的一些属性,以使其停止或注入自己的后处理以还原不法行为(用Regexp说出)。后者您可以将其视为额外的顶级属性,例如一个名为Nomess: - )

机会是这种尊重的行为在语言之间是不同的(那里有3个中间的行为),但无论你必须处理哪一个,相同的策略都会起作用。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top