在JSON和安全性中注入javascript
Injecting javascript in JSON and security
我有一个在线服务,用户可以在其中创建json支持的文档。然后将它们存储在服务器上,其他用户可以加载它们。json随后被完全按照提交的方式进行解码。如果用户在提交json之前对其进行篡改,并注入任意javascript,然后在查看器的浏览器上执行,是否存在安全风险?这可能吗?这就是我需要知道的,如果这是可能的,或者从json字符串中任意执行javascript是可能的。
这完全取决于a)是否在服务器端清理JSON,以及(甚至更多)b)再次加载JSON时如何在客户端解码JSON。
-
任何使用
eval()
将JSON反序列化为Javascript对象的代码都会受到您所描述的攻击。 -
任何使用JSONP加载JSON的代码(即将JSON作为Javascript文本传递给命名回调函数)都会受到您所描述的攻击(这实际上与使用
eval()
相同)。 -
大多数健壮的JSON解析机制(例如json2.js、jQuery
$.parseJSON
函数或支持它的浏览器中的原生JSON.parse()
函数)都不会接受不遵循JSON规范的JSON。因此,如果您使用库来解析JSON字符串,那么您可能是安全的。 -
无论您打算如何在客户端加载JSON,在服务器端清除任何用户提交的内容都是一种很好的做法。在这种情况下,您可以使用服务器端代码来检查JSON是否有效(例如,在Python中使用
json.loads(user_submitted_json)
,并捕获错误)。
因此,在服务器端和客户端都要小心的情况下,您应该能够安全地完成这项工作。
<plug shameless="true">
JSON sans-eval旨在避免格式错误的JSON问题,同时仍能有效解析。
此JSON解析器不尝试验证JSON,因此可能会在给定语法无效输入的情况下返回结果,但不使用eval,因此具有确定性,并保证不会修改其返回值以外的任何对象。
JSON.org的JavaScript中有许多JSON解析器。无论何时(当JSON可能来自不受信任的源时),无论何时(无论何时),只要存在安全问题,只要存在速度问题,只要不存在格式错误的JSON,都应使用此实现。
</plug>
JSON传统上是使用eval()
语句解析的,这几乎是不安全的。如果您允许这样做,您的应用程序将不安全。
- 注入Javascript以选择具有指定值的所有单选按钮
- 在表单上注入javascript以发送post请求
- 动态注入javascript文件-为什么大多数示例都附加到头上
- 从 Meteor 模板注入 JavaScript
- 注入javascript代码的正确方式
- Html注入javascript代码
- 如何在不使用脚本标记的情况下注入javascript
- 使用C#在BHO中注入javascript-如何正确地转义字符串
- 我们如何将PHP变量注入Javascript
- document.write 注入 javascript 的计时
- 通过浏览器扩展注入 JavaScript
- 在 WebView 完成从以前的 JavaScript 注入加载后,在 Android 中注入 JavaScript
- 在服务器上注入 JavaScript 代码
- 将 PHP 数据注入 JavaScript 代码
- 样式注入Javascript事件
- 从c#中的代码后面向链接按钮注入JavaScript
- 在匿名函数中注入JavaScript变量作为值
- 从Chrome扩展在页面中注入Javascript:并发问题
- asp.net我可以将配置设置注入javascript吗
- WebBrowser注入Javascript将焦点设置为第一个输入框