java - 通过 DOMParsing (Antisamy) 进行哪种编码

标签 java encoding character-encoding antisamy

我正在一个新项目中使用 antisamy,以防止 xss 漏洞。 在应用程序中,用户可以通过简单(ansi 编码)的 Excel 文件上传内容。 应该可以插入一些 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 文件的编码没有问题)。

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 AFTER 验证添加的(如果我将其打印在 HTML 页面上......)。但我的输入将由 AntiSamy 库中的 org.cyberneko.html.parsers.DOMFragmentParser 使用以下语句进行解析: parser.parse(new InputSource(new StringReader(html)), dom); 在我的 a 标签中,href 属性现在包含如下内容: https://bla.bla.com/bla?frame=Frameset[不可定义字符]lang=en 插入的 https://bla.bla.com/bla?frame=Frameset&lang=en

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

编辑:角色是 E2 8C A9 -> ⟨

最佳答案

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

关于java - 通过 DOMParsing (Antisamy) 进行哪种编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12622036/

相关文章:

java - 如何测试 Spring 的 JavaMailSender

java - 如何验证wrapper.conf中的Java参数

java - 使用 Guice 将不同的 JacksonJsonProvider 绑定(bind)到不同的 Jersey 资源

java - 使用良好的 Hibernate 实践获取值(value)

c++ - 德语变音符号作为命令行参数的错误编码

java - AES 解密方法错误

java - 使用 byte[] 和 charset 的构造函数创建字符串对象

javascript - 在字符串中查找十六进制(windows1252)字符串并将其转换 - Javascript

java - 如何使用 apachePOI 从 Word 文档(.doc 或 .docx)中读取形状组作为图像?

java - 使用 ISO8859_15_FDIS 将 Java 中的不可打印字符转换为可打印字符