【问题标题】:Apache Commons Text StringEscapeUtils vs JSoup for XSS prevention?用于 XSS 预防的 Apache Commons Text StringEscapeUtils vs JSoup?
【发布时间】:2012-03-01 02:38:51
【问题描述】:

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

寻找替代方案,哪个会更好? [Apache Commons Text 的 StringEscapeUtils] [1] 还是 [JSoup Cleaner][2]?

谢谢!

更新:

在为 JSoup 和 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

【问题讨论】:

  • JSoup 确实是一些很棒的东西。

标签: java xss apache-commons jsoup html-escape-characters


【解决方案1】:

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

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

【讨论】:

  • 他们不应该将 HTML 输入到我们的应用程序中(只是为了离开 cmets 等),因此无论是文本节点还是转义的 html 都无关紧要。但我想我不想担心的一件事是在再次显示之前需要取消转义文本。
【解决方案2】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 2010-09-20
    • 1970-01-01
    • 2015-06-06
    • 2018-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-20
    相关资源
    最近更新 更多