从服务器到客户端发送 JSON 格式的 HTML 时,我是否应该转义内容



我需要将HTML内容从服务器发送到客户端才能显示它们(用户可以以HTML格式发布评论,其他人可以查看这些评论)。我的客户端是丰富的JS应用程序,它通过JSON API与服务器通信。

我的问题是如果我返回这样的回复:

{
  commentId: '123',
  authorId: '123',
  comment: 'possible HTML here'
}

我应该转义服务器上comment字段中的内容并将转义发送到客户端,还是应该发送原始 HTML 并在需要时让客户端负责转义?什么是常见做法?

还要显示该 HTML,我应该以某种方式对其进行清理(例如删除脚本标签等)?

没有常见的做法,例如,如果用户提交一些带有脚本标签的 HTML,您可以在清理数据库后将所有内容保存在数据库中,例如 http://htmlpurifier.org/库,它允许您指定要剥离哪些标签以保留哪些标签......

或者,您可以按原样保存提交的 HTML,并使用例如 https://code.google.com/p/google-caja/wiki/JsHtmlSanitizer (https://code.google.com/p/google-caja/source/browse/trunk/src/com/google/caja/plugin/html-sanitizer.js?r=5170) 在客户端对其进行清理,它与 HTMLPurifier 执行的操作几乎相同,但在客户端

清理HTML是CPU密集型任务,因此在第一种情况下,您将使用服务器的CPU,在第二种情况下,您将使用用户的

你选择

你在这里混合了两个问题。

  1. 我应该[手动]转义JSON字符串吗?
  2. 我应该在其中转义 HTML 吗?

对于第一个问题,答案是否定的。您必须使用任何工具来从您的语言提供的数据结构中创建 JSON 字符串。

对于第二个问题 - 这取决于。如果您的用户确实允许发布HTML评论并且您已经验证了它们 - 显然您不必转义此HTML。

我认为你应该逃避它。否则,它将不是有效的JSON,您将在前端遇到问题。我建议在客户端使用 https://github.com/douglascrockford/JSON-js,并在后端使用一些替代方案。JSON.parse 和 JSON.stringify 将保证您传递有效数据。

您应该转义 JSON 内容。

我建议在以 JSON 格式发送之前对其进行转义,因为它使 JSON 在此过程中更加健壮。

例如,格式可能会在"和特殊字符上中断(这两种情况都会破坏我的 JSON 对象,导致网站损坏!

最新更新