0

我想清理用户输入以帮助防止 XSS 攻击,我们不一定关心 HTML 白名单,因为我们的用户不需要发布任何 HTML / CSS。

盯着那里的替代品,哪个会更好?[Apache Commons Text 的 StringEscapeUtils] [1] 还是 [JSoup Cleaner][2]?

谢谢!

更新:

在为它和 Apache Commons Text 编写了一些单元测试之后,我选择了 JSoup。

我喜欢 JSoup 不会与单引号混淆的方式(即“Alan's mom”没有改变,而 Apache Commons Text 将其变成“Alan's mom”)。

白名单根本不是问题。它不需要任何配置,相反,它们包含一些内置选项,如果我们选择允许 HTML 标记的某些子集,它们可能会派上用场。[1]:https ://commons.apache.org/proper/commons-text/apidocs/org/apache/commons/text/StringEscapeUtils.html [2]:http: //jsoup.org/cookbook/cleaning-html /whitelist-sanitizer

4

2 回答 2

0

“更好的”?我不认为这很重要。Cleaner 有一个 Whitelist.none(),逃逸工具会逃逸一切。

这取决于您希望“清理过的”输入如何呈现:您只想要文本节点,还是想要转义的 HTML 显示?

于 2012-02-08T16:15:19.430 回答
0

我很想看看 Cuga 的测试用例,因为如果您在 2.6 中使用 Apache Commons escapeHtml 或在 3+ 中使用 escapeHtml4,它不会添加斜杠。它只是将字符转换为 HTML 实体,这在文档中有明确说明。

我什至有一个公开的例子来测试这一点:

https://gist.github.com/croucha/2e2925264890886cbf4d

所以请证明我错了,否则你关于转义添加斜杠的部分是错误的。如果您仍想显示这些不安全的字符但避免在浏览器中执行,那么您最好的选择是 Apache commons。据我所知,Jsoup 完全省略了包括内容在内的字符,即使它是安全的。

于 2015-09-30T03:08:51.147 回答