我需要将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,在第二种情况下,您将使用用户的
你选择
你在这里混合了两个问题。
- 我应该[手动]转义JSON字符串吗?
- 我应该在其中转义 HTML 吗?
对于第一个问题,答案是否定的。您必须使用任何工具来从您的语言提供的数据结构中创建 JSON 字符串。
对于第二个问题 - 这取决于。如果您的用户确实允许发布HTML评论并且您已经验证了它们 - 显然您不必转义此HTML。
我认为你应该逃避它。否则,它将不是有效的JSON,您将在前端遇到问题。我建议在客户端使用 https://github.com/douglascrockford/JSON-js,并在后端使用一些替代方案。JSON.parse 和 JSON.stringify 将保证您传递有效数据。
您应该转义 JSON 内容。
我建议在以 JSON 格式发送之前对其进行转义,因为它使 JSON 在此过程中更加健壮。
例如,格式可能会在"和特殊字符上中断(这两种情况都会破坏我的 JSON 对象,导致网站损坏!