我需要从服务器发送HTML内容到客户端,以便显示它们(用户可以发布HTML格式的评论,这些评论可以被其他人查看)。我的客户端是富JS应用程序,它通过JSON API与服务器进行通信。
我的问题是,如果我返回这样的响应:
{
commentId: '123',
authorId: '123',
comment: 'possible HTML here'
}
我应该在服务器上转义comment
字段中的内容,然后将转义的内容发送到客户端,还是应该发送原始的HTML,并在需要时让客户端处理转义?常见的做法是什么?
另外,为了显示HTML,我是否应该对其进行清理(例如,删除脚本标记等)?
发布于 2013-09-05 08:42:02
没有通用的做法,例如,如果用户提交了一些带有脚本标记的超文本标记语言,您可以在使用例如http://htmlpurifier.org/库对其进行消毒后将所有内容保存在数据库中,该库允许您指定要剥离哪些标记并保留……
或者,您可以将提交的超文本标记语言保存为原样,然后在客户端使用例如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,在第二种情况下,您将使用用户的cpu
你来选择
发布于 2013-09-05 08:33:32
这里有两个混合的问题。
HTML是否应该转义JSON字符串manually
对于第一个问题,答案是否定的。您必须使用任何工具在您的语言提供的数据结构之外创建JSON字符串。
第二个问题--视情况而定。如果你的用户确实允许发布超文本标记语言的评论,并且你已经验证了它们--显然你不必避开这个超文本标记语言。
发布于 2013-09-05 08:24:17
我觉得你应该逃离它。否则,它将不是有效的JSON,并且您将在前端遇到问题。我将建议在客户端使用https://github.com/douglascrockford/JSON-js,并在您的后端使用一些替代方案。JSON.parse和JSON.stringify将保证您传递的是有效数据。
https://stackoverflow.com/questions/18631157
复制