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

Javascript 在从服务器向客户端发送JSON格式的HTML时,是否应该转义内容?,javascript,html,json,escaping,single-page-application,Javascript,Html,Json,Escaping,Single Page Application,我需要将HTML内容从服务器发送到客户端,以便显示它们(用户可以以HTML格式发布评论,其他人可以查看这些评论)。我的客户端是富JS应用程序,它通过JSON API与服务器通信 我的问题是,如果我回复这样的回复: { commentId: '123', authorId: '123', comment: 'possible HTML here' } 我应该转义服务器上comment字段中的内容并将转义的内容发送给客户端,还是应该发送原始HTML并在需要时让客户端处理转义?通常的做法

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

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

{
  commentId: '123',
  authorId: '123',
  comment: 'possible HTML here'
}
我应该转义服务器上
comment
字段中的内容并将转义的内容发送给客户端,还是应该发送原始HTML并在需要时让客户端处理转义?通常的做法是什么


为了显示HTML,我是否应该以某种方式对其进行清理(例如,删除脚本标记等)?

我认为您应该对其进行转义。否则它将不是一个有效的JSON,前端将出现问题。我建议在客户端使用,在后端使用它的一些替代方案。JSON.parse和JSON.stringify将保证您传递有效数据。

我认为您应该避开它。否则它将不是一个有效的JSON,前端将出现问题。我建议在客户端使用,在后端使用它的一些替代方案。JSON.parse和JSON.stringify将保证您传递有效数据。

您应该转义JSON内容

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


例如,格式可能会因“和特殊字符”而中断(这两种情况都会中断我的JSON对象,导致网站中断!)。

您应该转义JSON内容

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


例如,格式可以突破“和特殊字符”(这两种情况都破坏了我的JSON对象,导致网站崩溃!)

这里有两个问题

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


    至于第二个问题,这要看情况而定。如果您的用户确实允许发布HTML评论,并且您已经验证了它们-显然您不必逃避此HTML。

    这里有两个问题

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


    至于第二个问题,这要看情况而定。如果您的用户确实允许发布HTML评论,并且您已经对其进行了验证-显然您不必转义此HTML。

    没有常见的做法,例如,如果用户提交带有脚本标记的HTML,您可以在使用示例库对其进行清理后将所有内容保存在数据库中,它允许您指定要剥离的标签和要保留的标签

    或者,您可以将提交的HTML保存为原样,并使用example()在客户端对其进行清理,它的功能与HTMLPurifier几乎相同,但在客户端

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


    您选择

    没有常见做法,例如,如果用户提交一些带有脚本标记的HTML,您可以在使用示例库对其进行清理后将所有内容保存在数据库中,该库允许您指定要删除哪些标记,保留哪些标记

    或者,您可以将提交的HTML保存为原样,并使用example()在客户端对其进行清理,它的功能与HTMLPurifier几乎相同,但在客户端

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


    如果选择

    ,我只会将HTML字符串按原样发送到服务器并在那里进行处理。如果你没有做前端模板,我就没有理由在那里做。我只需要将HTML字符串原样发送到服务器并在那里进行处理。如果你不做前端模板,那就没有理由在那里做。