rails 3转义为html标签,当用作JSON时,在浏览器中未转义

时间:2016-09-12 22:56:30

标签: javascript jquery ruby-on-rails ruby-on-rails-3 backbone.js

我有一个Rails 3.2应用程序,它使用ActiveResource与第三方XML API交互一些数据。我们希望确保在第三方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 个答案:

答案 0 :(得分:1)

如果发送到浏览器的字符串与问题中的字符串类似,那么浏览器不会将其转换回来,而是已经发送过未转发的字符串。但是,我不认为服务器需要对其进行编码,因为它只是以中间数据格式(JSON)发送的数据。 正确编码为JSON。当你将它插入客户端的DOM时,你必须要小心。

在模板中,请确保使用<% - 而不是<%=并且它应该没问题,除非您生成某种类型的javascript代码,但这可能是边缘案例。

您也可以选择按原来的要求在响应中对其进行编码,在这种情况下,您应该查看它是如何从XML转换为JSON的。但请注意,不同的上下文可能需要不同的编码(特别是在Javascript上下文中写入纯HTML和编码的编码要求非常不同),发送数据的服务器可能不(想要)知道客户端想要做什么它