从服务器向客户端发送JSON中的HTML时,我应该逃避内容吗?

时间:2013-09-05 08:17:38

标签: javascript html json escaping single-page-application

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

我的问题是,如果我回复此类回复:

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

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

还要显示HTML我应该以某种方式清理它(例如删除脚本标记等)?

4 个答案:

答案 0 :(得分:1)

没有通常的做法,例如,如果用户使用脚本标记提交了一些HTML,您可以在使用例如http://htmlpurifier.org/库进行清理之后将所有内容保存在数据库中,这样您就可以指定哪些标记去除哪个...

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

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

您选择

答案 1 :(得分:0)

这里有两个问题。

  1. 我应该[手动]逃避JSON字符串吗?
  2. 我应该在其中转义HTML吗?
  3. 对于第一个问题,答案是否定的。您必须使用任何工具从您的语言提供的数据结构中创建JSON字符串。

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

答案 2 :(得分:-2)

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

答案 3 :(得分:-2)

您应该转义JSON内容。

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

格式可能会破坏“和特殊字符(例如,两种情况都会破坏我的JSON对象,导致网站损坏!)。