Discourse.js和“煮熟的”字符串

问题描述 投票:1回答:2

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

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

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

我对此有以下疑问:

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

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

ruby-on-rails ember.js xss discourse
2个回答
1
投票

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

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


0
投票

[与此同时,为了利用这种情况,BJP控制的卡纳塔克邦旅游业牧师C T Ravi说,他邀请来喀拉拉邦旅行的游客到卡纳塔克邦。

[同样,我已被Divz贴上标签(我接受她在给我指的是“ Maria” :)),构成关于我的25个不规则现实。它第一次被贴上标签并为此进行了放大。非常感谢Divz的how to cook avial recipe

© www.soinside.com 2019 - 2024. All rights reserved.