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

我注意到Discourse使用了“煮熟的”字符串的概念,这些字符串是用于帖子之类的东西的部分预转义的字符串,然后使用三重胡须( {{{}}} )在Ember中显示它们。

但是,在其他情况下,例如帖子标题,Discourse将发送和接收未转义的原始字符串,例如“关于标签的This&that”,并使用双胡须{ {{}}来显示它们。

我对此有以下疑问:

(1)看来,Discourse仅对支持Markdown的字段(例如帖子正文)使用“烹饪”。 做饭仅仅是处理后置Markdown字段的一种方法,还是打算解决XSS问题?

(2)是否将原始字符串(包括看起来像HTML标记或实际上是HTML标记的内容)以JSON形式从服务器传递到客户端,不认为是XSS漏洞? 一些XSS嗅探器显然抱怨这种事情,而某些人似乎建议在服务器上对HTML实体进行转义和/或清理。

===============>>#1 票数:1 已采纳

1)不太确定这里的话语在做什么。 因为markdown呈现为HTML,所以它需要使用未转义的输出。 否则将从markdown生成的HTML进行转义。 话语在源代码中似乎确实具有html净化功能,尽管我不确定何时应用它。

2)我会拒绝。 JSON不是可执行格式。 因此,只要将文本视为文本等,就没有问题。 通常,不逃避服务器端的一个很好的理由是使用本地控件显示文本的移动应用程序。 单页应用程序和移动应用程序可以使用相同的JSON API,但是对于移动应用程序而言,转义不是必需的。 另外,转义还需要上下文。 OWASP XSS预防备忘单定义了一组需要不同转义的上下文。 因此,在服务器上进行一次转义可能是错误的。

  ask by translate from so

未解决问题?本站智能推荐: