我有一个Rails 3.2应用程序,它使用ActiveResource与第三方XML API交互一些数据。我们希望确保在第三方XML中使用XSS,因此我们启用了:
ActiveSupport.escape_html_entities_in_json = true
这似乎适用于XML数据并转换&lt;标记在一个潜在危险的脚本中调用<
,如下所示:
<script>alert('xss')</script>
(不确定为什么它只能控制LT TBH,但似乎是设计上的)
问题在于,当我将该XML转换为JSON&amp;发送到浏览器,浏览器将其视为未转义。 JSON中发送到浏览器的字符串如下所示:
\u003Cscript\u003Ealert('xss')\u003C/script\u003E"
任何人都可以解释为什么浏览器会将其转换回未转义的字符串,并建议解决方法吗?
FWIW我使用的是Backbone,Jquery,JST&amp; EJS
答案 0 :(得分:1)
如果发送到浏览器的字符串与问题中的字符串类似,那么浏览器不会将其转换回来,而是已经发送过未转发的字符串。但是,我不认为服务器需要对其进行编码,因为它只是以中间数据格式(JSON)发送的数据。 正确编码为JSON。当你将它插入客户端的DOM时,你必须要小心。
在模板中,请确保使用&lt;% - 而不是&lt;%=并且它应该没问题,除非您生成某种类型的javascript代码,但这可能是边缘案例。
您也可以选择按原来的要求在响应中对其进行编码,在这种情况下,您应该查看它是如何从XML转换为JSON的。但请注意,不同的上下文可能需要不同的编码(特别是在Javascript上下文中写入纯HTML和编码的编码要求非常不同),发送数据的服务器可能不(想要)知道客户端想要做什么它