1

我正在将 antisamy 用于一个新项目,以防止 xss 漏洞。在应用程序中,用户可以通过简单的(ansi 编码)excel 文件上传内容。应该可以插入一些 html 但不能插入 javascript 等等。

当我用 antisamy 扫描我的输入时,我得到了这个错误: a 标签包含一个我们无法处理的属性。href 属性的值为“https 8; 7; 7;bla 6;bla 6;com 7;bla 7;...”。出于安全原因,无法接受此值。我们选择过滤 a 标签以继续处理输入。

我在实体中添加了一些空格,您可以看到它。

(但它应该像https://bla.bla.com/bla/ ...)

当我通过代码调试时,“受污染的 Html 输入”及其 href 属性似乎是正确的(因此 excel 文件的编码没有问题)。

antisamy-policy 文件如下所示:

...
<regexp name="onsiteURL" value="([\w\\/\.\?=&amp;;#-~]+|#(\w)+)"/>
<regexp name="offsiteURL" value="(\s)*((ht|f)tp(s?)://|mailto:)[A-Za-z0-9]+[~a-zA-Z0-9-_\.@#$%&amp;;:,\?=/\+!]*(\s)*"/>
...
<attribute name="href">
  <regexp-list>
    <regexp name="onsiteURL"/>
    <regexp name="offsiteURL"/>
  </regexp-list>
  <literal-list>
    <literal value="javascript:void(0)"/>
  </literal-list>
</attribute>
...

我还测试了正则表达式模式,因为我认为链接是有效的。当然不是,当它由 html 实体编码时。

所以有什么问题?

非常感谢提前


我通过 AntiSamy 代码进行了一些调试,现在我看到了问题,但我仍然无法解决问题。htmlentities 是在验证后由 antisamy 添加的(如果我将它打印在 HTML 页面上..)。但是我的输入将由 AntiSamy 库中的 org.cyberneko.html.parsers.DOMFragmentParser 使用以下语句解析: parser.parse(new InputSource(new StringReader(html)), dom); 在我的 a 标签中, href 属性现在包含如下内容: https://bla.bla.com/bla?frame=Frameset[undefinable character]lang=en insted of https://bla.bla.com/bla?frame =框架集&lang=zh

所以这似乎是一个编码问题,&符号将不再是&符号。如何找出我应该使用哪种编码?

编辑:字符是 E2 8C A9 -> ⟨

4

1 回答 1

1

我通过将“&”替换为“&”做了一些解决方法。我不知道为什么,但它有效。这是唯一不能正常工作的角色。

于 2012-10-05T06:45:05.863 回答