我正在为一个新的项目使用antisamy,以防止xss的可维护性。在应用程序中,用户可以通过一个简单的excel文件(ansi编码)上传内容。应该可以插入一些html,但不可能插入javascript等等。
当我用antisamy扫描我的输入时,我会得到以下错误:a标记包含一个我们无法处理的属性。href属性的值为"https& #5 8 ;& #4 7 ;& #4 7 ;bla& #4 6 ;bla& #4 6 ;com& #4 7 ;bla& 4 7;……“。由于安全原因,无法接受此值。为了继续处理输入,我们选择了筛选a标记。
我在实体中添加了一些空格,这样你就可以看到它。
(但应该像https://bla.bla.com/bla/.)
当我通过代码进行调试时,“受污染的Html输入”及其href属性似乎是正确的(因此excel文件的编码没有问题)。
反策略文件如下所示:
...
<regexp name="onsiteURL" value="([\w\\/\.\?=&;#-~]+|#(\w)+)"/>
<regexp name="offsiteURL" value="(\s)*((ht|f)tp(s?)://|mailto:)[A-Za-z0-9]+[~a-zA-Z0-9-_\.@#$%&;:,\?=/\+!]*(\s)*"/>
...
<attribute name="href">
<regexp-list>
<regexp name="onsiteURL"/>
<regexp name="offsiteURL"/>
</regexp-list>
<literal-list>
<literal value="javascript:void(0)"/>
</literal-list>
</attribute>
...我还测试了regex模式,因为我认为链接是有效的。当然不是,它是由html实体编码的。
那有什么问题吗?
提前谢谢
我通过AntiSamy代码进行了一些调试,现在我看到了问题,但是我无法解决这个问题。在验证后,HTML实体是由antisamy添加的(如果我要在HTML页面上打印它的话)。但是我的输入将由org.cyberneko.html.parsers.DOMFragmentParser在AntiSamy库中使用以下语句进行解析:parser.parse(新的InputSource(新的StringReader(html)),dom);在我的a标记中,href属性现在包含如下内容:https://bla.bla.com/bla?frame=Frameset[undefinable字符]lang=en insted of https://bla.bla.com/bla?frame=Frameset&lang=en
因此,这似乎是一个编码问题,符号将不再是一个符号。如何找出,我应该使用哪种编码?
编辑:字符为E2 8C A9 ->⟨
发布于 2012-10-05 06:45:05
我用"& ;“替换了"&”,做了一个小小的解决办法。我不知道为什么,但很管用。这是唯一一个不能正常工作的角色。
https://stackoverflow.com/questions/12622036
复制相似问题