2

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

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

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

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

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

4

4 回答 4

1

没有常见的做法,例如,如果用户提交一些带有脚本标签的 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,在第二种情况下,您将使用用户的

你选

于 2013-09-05T08:42:01.813 回答
0

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

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

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

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

于 2013-09-05T08:33:32.423 回答
-1

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

于 2013-09-05T08:24:16.930 回答
-1

您应该转义 JSON 内容。

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

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

于 2013-09-05T08:24:44.810 回答