pen*_*rob 5 javascript security json code-injection
我有一个在线服务,用户可以在其中创建json支持的文档.然后将它们存储在服务器上,其他用户可以加载它们.然后将json完全按照提交的方式进行解码.如果用户在提交json之前篡改json并注入任意javascript,然后在观众的浏览器上执行,是否存在任何安全风险?这甚至可能吗?这是我需要知道的,如果这是可能的,或者可以从json字符串中任意执行javascript.
这完全取决于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中使用,并捕获错误).
因此,在服务器端和客户端都要小心,您应该能够安全地执行此操作.
<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)
| 归档时间: |
|
| 查看次数: |
8834 次 |
| 最近记录: |