在JSON和安全性中注入javascript

pen*_*rob 5 javascript security json code-injection

我有一个在线服务,用户可以在其中创建json支持的文档.然后将它们存储在服务器上,其他用户可以加载它们.然后将json完全按照提交的方式进行解码.如果用户在提交json之前篡改json并注入任意javascript,然后在观众的浏览器上执行,是否存在任何安全风险?这甚至可能吗?这是我需要知道的,如果这是可能的,或者可以从json字符串中任意执行javascript.

nra*_*itz 9

这完全取决于a)您是否在服务器端擦除JSON,以及(更多)b)当您再次加载时如何在客户端解码JSON.

  • eval()用于将JSON反序列化为Javascript对象的任何代码都对您描述的攻击完全开放.

  • 使用JSONP加载JSON的任何代码(即将JSON作为Javascript文字传递给命名的回调函数)对您描述的攻击是开放的(它实际上与使用相同eval()).

  • 最强大的JSON解析机制(例如json2.js,jQuery $.parseJSON函数或JSON.parse()支持它的浏览器中的本机函数)将不接受不遵循JSON规范JSON.因此,如果您使用库来解析JSON字符串,那么您可能是安全的.

  • 无论您打算如何在客户端加载JSON,最好在服务器端擦除任何用户提交的内容.在这种情况下,您可以使用服务器端代码来检查JSON是否有效(例如,json.loads(user_submitted_json)在Python中使用,并捕获错误).

因此,在服务器端和客户端都要小心,您应该能够安全地执行此操作.


Mik*_*uel 7

<plug shameless="true">
Run Code Online (Sandbox Code Playgroud)

JSON sans eval旨在避免格式错误的JSON问题,同时仍然有效解析.

此JSON解析器不会尝试验证JSON,因此可能会返回给定语法无效输入的结果,但不使用eval,因此是确定性的,并且保证不会修改除其返回值之外的任何对象.

json.org上的JavaScript中有许多JSON解析器.只要担心安全性(当JSON可能来自不受信任的来源)时,就应该使用此实现,速度是一个问题,并且错误的JSON不是一个问题.

</plug>
Run Code Online (Sandbox Code Playgroud)


Pau*_*lan 5

传统上,JSON使用一个eval()语句进行解析,该语句尽可能不安全.如果您允许,您的应用程序将是不安全的.

  • Python的解析器不评估javascript;) (4认同)