Discourse.js和“煮熟”字符串

时间:2014-04-21 03:12:24

标签: ruby-on-rails ember.js xss discourse

我一直在审查discourse.js的源代码,这是一个用Ember / Rails / Postgres编写的论坛。我正在研究在这些类型的应用程序中避免XSS漏洞的最佳实践。

我注意到Discourse使用" cooked"字符串,它们是用于帖子主体之类的部分预转义字符串,然后使用三重胡须({{{}}})在Ember中显示它们。

然而,在其他情况下,如帖子标题,话语发送和接收原始的,未转义的字符串,例如"此&关于标记",并使用双重胡须{{{}})显示它们。

关于这一切,我有以下问题:

(1)Discourse似乎使用"烹饪"仅适用于支持Markdown的字段,例如帖子正文。烹饪只是处理后处理Markdown字段的一种方式,还是打算解决XSS问题?

(2)在JSON中从服务器传递到客户端的原始字符串(包括看似HTML标记或实际上是HTML标记的东西)不被视为XSS漏洞吗?一些XSS嗅探器显然抱怨这些事情,有些人似乎建议在服务器上进行HTML实体转义和/或清理。

1 个答案:

答案 0 :(得分:1)

1)不完全确定这里的话语在做什么。因为markdown呈现为HTML,所以需要使用非转义输出。否则,从markdown生成的HTML将被转义。话语似乎确实在源代码中进行了html清理,尽管我不确定它何时应用。

2)我会说不。 JSON不是可执行格式。因此,只要将文本视为文本等,就没有问题。作为一般概念,不逃避服务器端的一个很好的理由是使用本机控件来显示文本的移动应用程序。单页应用程序和移动应用程序可以使用相同的JSON API,但移动应用程序不需要转义。另外,转义需要上下文。 OWASP XSS预防备忘单定义了一组需要不同转义的上下文。因此,服务器上的单个转义可能是错误的。