【问题标题】:Is there a good Javascript based HTML parsing library available?是否有一个好的基于 Javascript 的 HTML 解析库可用?
【发布时间】:2011-03-11 17:36:57
【问题描述】:

我的目标是获取最终用户输入的 HTML,删除某些不安全的标签,例如 <script>,并将其添加到文档中。有人知道一个好的 Javascript 库来清理 html 吗?

我在网上搜索了一些,包括John Resig's HTML parserErik Arvidsson's simple html parserGoogle's Caja Sanitizer,但我一直没能找到很多关于人们是否有使用这些库的良好经验的信息,我'我担心它们不够强大,无法处理任意 HTML。将 HTML 发送到我的 Java 服务器进行清理会更好吗?

【问题讨论】:

  • 鉴于它最好在服务器端进行清理,因此可能不值得付出额外的努力。除非您的客户端消毒剂始终提供与服务器端完全相同的结果,否则可能不值得。

标签: javascript html parsing xss sanitization


【解决方案1】:

将 HTML 发送到我的 Java 服务器进行清理会更好吗?

是的。

过滤“不安全”输入必须在服务器端完成。没有其他方法可以做到这一点。无法在客户端进行过滤,因为“客户端”可以是 Web 浏览器,也可以是带有脚本的机器人。

【讨论】:

  • 过滤不安全的输入,是的,这必须在服务器上完成,因为客户端可能会因为不执行它应该执行的过滤而伤害其他用户。然而,这是过滤不安全的输出,不过滤的客户端只会伤害自己。因此,使用 Javascript 执行此操作就可以了。
  • @bart “不过滤的客户端只会伤害自己。因此,使用 Javascript 执行此操作很好”
  • 受感染的用户可以做各种坏事。如果您过滤掉服务器上的脚本标签,它只会在渲染时将它们放回去。或者更有可能的是,它不会为这种不便而烦恼,直接运行邪恶的代码。
  • @Bart van Heukelom 如果代码永远不会与其他用户或服务器共享并且只是使用 Javascript 插入到当前页面中,那么您上面的第一条评论是正确的,在重新阅读原始问题时我意识到这可能是 OP 的意思。
  • 即使它与他人共享也是如此,只要它被正确记录为未经检查的数据(但当然, 并非总是如此)。跨度>
【解决方案2】:

您可以使用jQuery 解析 HTML,但我很确定任何基于黑名单(即过滤掉)的清理方法都会失败 - 您可能需要基于“过滤”的方法,最终您不需要无论如何都希望依靠 JavaScript 来确保安全。在任何情况下,您都可以像这样使用 jQuery 进行 DOM 解析:

var htmlS = "<html>etc.etc.";
$(htmlS).remove("script"); /* DONT RELY ON THIS FOR SECURITY */

【讨论】:

  • 好点。事实上,您可能甚至需要 jQuery 包装器本身,但它会让事情变得更容易。只需让浏览器自己处理解析,然后使用可用的 DOM 方法来做任何你想做的事情。
  • 查看此网页,了解您容易受到 XSS 攻击的所有疯狂方式。 ha.ckers.org/xss.html。不幸的是,仅仅删除脚本标签还不够好......
  • @gerdemb - 当然,任何 HTML 清理都应该作为白名单而不是黑名单来实现。
  • 简单地使用 jQuery 或 HTML 解析器进行解析甚至还没有开始描述为不受信任的代码过滤文档的复杂性。您不能只删除脚本元素。请参阅上面 gerdemb 发布的 XSS 备忘单。但只是举例,请考虑:脚本元素、onload 属性、onclick 属性、on、元元素、javascript: URL、onfuscated javascript: URL、对象元素、applet 元素、CSS 中的 url() 等等.此答案中的示例因其不足而有害。即使是基于白名单的方法也必须过滤诸如 a. 等元素中的 URL。
  • @thomasrutter 绝对同意
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-08-29
  • 2011-10-04
  • 2011-07-08
  • 1970-01-01
  • 2023-04-07
  • 2010-10-04
  • 2011-02-08
相关资源
最近更新 更多