用作 JSON 时,rails 3 转义的 html 标签在浏览器中未转义
Posted
技术标签:
【中文标题】用作 JSON 时,rails 3 转义的 html 标签在浏览器中未转义【英文标题】:rails 3 escaped html tags unescaped in browser when served as JSON 【发布时间】:2017-01-20 11:00:00 【问题描述】:我有一个 Rails 3.2 应用程序,它使用 ActiveResource 与第三方 XML API 交互以获取某些数据。我们希望确保在该第 3 方 XML 中防止 XSS,因此我们启用了:
ActiveSupport.escape_html_entities_in_json = true
这似乎适用于 XML 数据,并将潜在危险脚本调用中的 <,如下所示:
<script>alert('xss')</script>
(不知道为什么它只逃避 lt TBH,但它似乎是设计使然)
问题是当我将该 XML 转换为 JSON 并发送到浏览器时,浏览器将其视为未转义。发送到浏览器的 JSON 字符串如下所示:
\u003Cscript\u003Ealert('xss')\u003C/script\u003E"
谁能解释为什么浏览器将其转换回未转义的字符串,并提出解决方法?
FWIW 我正在使用 Backbone、Jquery、JST 和 EJS
【问题讨论】:
【参考方案1】:如果发送到浏览器的字符串与问题中的字符串一样,则不是浏览器将其转换回来,它已经未经转义发送。但是,我认为服务器不需要对其进行编码,因为它只是数据,以 JSON 的中间数据格式发送。它是为 JSON 正确编码的。但是,当您将其插入客户端上的 DOM 时,您必须小心。
在模板中,确保您使用 除非您正在生成某种类型的 javascript 代码,但这可能是一种边缘情况。 p>
您也可以选择按照您最初的要求在响应中对其进行编码,在这种情况下,您应该查看它是如何从 XML 转换为 JSON 的。但请注意,不同的上下文可能需要不同的编码(尤其是写入纯 HTML 与 Javascript 上下文的编码要求非常不同),并且发送数据的服务器可能不(想要)知道客户端想要做什么它。
【讨论】:
以上是关于用作 JSON 时,rails 3 转义的 html 标签在浏览器中未转义的主要内容,如果未能解决你的问题,请参考以下文章
在将 Rails 变量用于 Javascript 时转义引号?
带有从 Rails 生成的 JSON 数据源的 jQuery UI 自动完成 - 不工作
如何在 Rails 中将 Javascript 对象转换为 JSON?
json转义 使用 JavaScriptSerializer 时 需要添加的引用