blog.csdn.net/hengyunabc/article/details/26305203

前言

JSON(JavaScript Object Notation),可以说是事实的浏览器,服务器交换数据的标准了。目测其它的格式如XML,或者其它自定义的格式会越来越少。

为什么JSON这么流行?

和JavaScript无缝对接是一个原因。还有一个重要原因是可以比较轻松的实现跨域。如果是XML,或者其它专有格式,则很难实现跨域,要通过flash之类来实现。任何一种数据格式,如何解析处理不当,都会存在安全漏洞。下面扯谈下JSON相关的一些安全东东。

在介绍之前,先来提几个问题:

其它的一些东东

MongoDB注入

这个实际上就是JSON注入,简单的字符串拼接对象转json,可能会引发各种数据被修改的问题。

JSON解析库的问题

有些JSON库解析库支持循环引用,那么是否可以构造特别的数据,导致其解析失败?从而引起CPU使用过高,拒绝服务等问题?

FastJSON的一个StackOverflowError Bug:

安全谈论_谈安全感悟_对象转json

有些JSON库解析有问题:

JSON-P

有人提出一个JSON-P的规范,但是貌似目前都没有浏览器有支持这个的。原理是对于JSONP请求,浏览器可以要求服务器返回的MIME是”application/json-p”,这样可以严格校验是否合法的JSON数据。

CORS(Cross-Origin Resource Sharing)

为了解决跨域调用的安全性问题,目前实际上可用的方案是CORS:

原理是通过服务器端设置允许跨域调用,然后浏览器就允许XMLHttpRequest跨域调用了。

CORS可以发起GET/POST请求,不像JSONP,只能发起GET请求。

默认情况下,CORS请求是不带cookie的。

安全谈论_对象转json_谈安全感悟

我个人认为,这个方案也很蛋疼对象转json,一是需要服务器配置,二是协议复杂。浏览器如果不能确定是否能够跨域调用,还要先进行一个Preflight Request。

实际上,即使服务器不允许CORS,XMLHttpRequest请求实际上是发送出去,并且返回数据的了,只是浏览器没有让JS环境拿到而已。

另外,我认为有另外一种数据泄露的可能:黑客可能控制了某个路由,他不能随意抓包,但是他可以在回应头里插入一些特别的头部,比如:

Access-Control-Allow-Credentials: true

限 时 特 惠: 本站每日持续更新海量各大内部创业教程,一年会员只需98元,全站资源免费下载 点击查看详情
站 长 微 信: muyang-0410