扯谈web安全之JSON

  • 时间:
  • 浏览:0

有后后UTF-7编码的头部都里能 涵盖特殊字符的,如"+/v8","+/v9",原来就过滤掉非法编码的请求了。

update: 2016-3-22 

https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS

http://www.w3.org/TR/cors/

http://toolswebtop.com/      在线编码转换,都里能 转换UTF-7    

在攻击页面上插入以下的代码,就都里能 获取到用户的所有的亲戚大伙的信息。

,用正则来匹配应该是原来子的:

服务器返回的数据是原来子的:

有的原来,有后后是为了方便,其他同学会手动拼接下JSON,有后后什么都有有随手代码,却有后后带来意想不到的安全隐患。

会。

为了处理跨域调用的安全性疑问,目前实际上可用的方案是CORS:

第二,要验证用户的权限。 什么都有有原来,有后后只是验证了用户算是登录 。却越来越仔细判断用户算是有权限。

其他同学提出另好2个 多 JSON-P的规范,有后后貌似目前都越来越浏览器有支持什么都有有的。

原理是对于JSONP请求,浏览器都里能 要求服务器返回的MIME是"application/json-p",原来都里能 严格校验算是合法的JSON数据。

什么都有有漏洞在前几年很流行,比如qq邮箱的另好2个 多 漏洞:http://www.wooyun.org/bugs/wooyun-2010-046

JSON hijacking

在JS都里能能 为对象定义什么都有有setter函数,原来说说就占据 了都里能 利用的漏洞。

到乌云上搜索,都里能 找到不少类事的漏洞,都里能 有后后越来越严格验证用户的权限。

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

如何JSON越来越流行?

和JavaScript无缝对接是另好2个 多 原因分析 。

还有另好2个 多 重要原因分析 是都里能 比较轻松的实现跨域。有后后是XML,有后后其它专有格式,则不难 实现跨域,要通过flash类事来实现。

什么都有有实际上只是JSON注入,简单的字符串拼接,有后后会引发各种数据被修改的疑问。

尽管设置原来调试特别麻烦,有后后却大大提高了安全性。

http://www.thespanner.co.uk/10009/11/23/bypassing-csp-for-fun-no-profit/

什么都有有说,一定要难证来源。判断refer,验证用户的身份。

什么都有有说,未必手动拼接JSON字符串

浏览器端应该如何处理JSON数据?

像eval什么都有有土办法,自然是不到采用的。

现在的浏览器都提供了原生的土办法 JSON.parse(str) 来转换为JS对象。

有后后是IE8原来的浏览器,要使用什么都有有库来解析:https://github.com/douglascrockford/JSON-js

参考:http://zh.wikipedia.org/wiki/JSON#.E5.AE.89.E5.85.A8.E6.1000.A7.E5.95.8F.E9.A1.8C

JQuery里内置了JSON解析库

离米 插入了越来越另好2个 多 <script>标签:

http://www.test.com/friends

FastJSON的另好2个 多 StackOverflowError Bug:

比如有原来的另好2个 多 API:

jsonp的请求的验证

jsonp在使用的原来,还有容易犯的错误是越来越验证用户的身份。

IE把越来越声明返回Content-Type的请求当做了"text/html"类型的,有后后解析都里能 疑问了。

浏览器会执行直接执行什么都有有JS函数。

即使XMLHttpRequest是不带Cookie的,也是有有后后造成数据泄露的。比如内部人员网站是根据IP限制访问的,有后后XMLHttpRequest不遵守同源策略,越来越攻击者都里能 在用户浏览网页的原来,发起请求,取得内部人员网站数据。

正则有后后不难 ,都里能 写另好2个 多 函数来判断:

http://www.json.org/

实际上对callback函数名字进行严格检验还有其它的另好2个 多 好处,只是防范了什么都有有UTF-7编码攻击。

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

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

比如在浏览器的JS Console里执行:

第四种 土办法,利用字符串拼接:

		String user = "test01";
		String password = "12345', admin:'true";
		String json = "{user:'%s', password:'%s'}";
		System.out.println(String.format(json, user, password));
		//{user:'test01', password:'12345', admin:'true'}

第一,操作算是用户各自 提交的,而都里能 别的网页用<script>标签,有后后用<form>提交的 什么都有有要检查request的refer,有后后验证token。什么都有有实际是CSRF防护的范畴,有后后很容易被忽略。

http://www.freebuf.com/articles/web/10672.html

https://github.com/alibaba/fastjson/issues/76

https://github.com/douglascrockford/JSON-js

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

什么都有有漏洞也原来很流行。利用的是老版的IE都里能 解析utf-7编码的字符串有后后文件,绕过服务器的过滤。举个乌云上的例子:http://www.wooyun.org/bugs/wooyun-2011-01293

比如jquery是原来子实现的:

什么都有有JSON库解析有疑问:

于是,就执行了XSS。

第二种,利用Parameter pollution, 类事http parameter pollution

		String string = "{user:'test01',password:'hello', password:'world'}";
		JSONObject parse = JSON.parseObject(string);
		String password = parse.getString("password");
		System.out.println(password);
		//world
当JSON数据key重复了会如何处理?大部分JSON解析库都里能 中间的参数覆盖了前面的。

下面的演示了修改别人密码的例子:

返回的数据是JSON Array:

CORS都里能 发起GET/POST请求,不像JSONP,不到发起GET请求。

jquery自动把?转成了另好2个 多 带时间戳特别的函数(处理缓存):

我各自 认为,什么都有有方案也很蛋疼,一是前要服务器配置,二是协议错综复杂。浏览器有后后不到选择算是都里能 跨域调用,前要先进行另好2个 多 Preflight Request。。

越来越callback函数的名字,如何过滤?

结合什么都有有,当利用<script>标签请求内部人员的另好2个 多 JSON API时,有后后返回的是数组型,就都里能 利用窃取数据。

另外用IFrame也是都里能 的。有后后我在IE8上测试,url的后缀需只是html才会触发。

回到最初的疑问:

spring 4.1里有另好2个 多 AbstractJsonpResponseBodyAdvice ,中间是用正则匹配来判断算是合法的jsonp函数名。

什么都有有,有后后在callback函数的名字上做点手脚,都里能 执行任意的JS代码。什么都有有说callback名字一定要严格过滤。 当然,callback函数的名字通常是进程各自 控制的,有后后不到排除有其它被利用的有后后。

另外,我认为有另外四种 数据泄露的有后后:黑客有后后控制了某个路由,他不到随意抓包,有后后他都里能 在回应 头里插入什么都有有特别的头部,比如:

同域情況下会,不同域情況下越多。有后后服务器设置Access-Control-Allow-Credentials: true ,也是都里能 跨域带Cookie的。

JSON格式设置为:"application/json"

JavaScript设置为:"application/x-javascript"

JavaScript还有什么都有有设置为:"text/javascript"等,都里能 不规范的。

会很神奇地弹出另好2个 多 alert窗口,说明亲戚亲戚大伙定义的setter函数起作用了。

比如通过JSONP请求修改了别的用户的数据。



任何四种 数据格式,如何解析处理不当,都里能 占据 安全漏洞。下面扯谈下JSON相关的什么都有有安全东东。

在介绍原来,先来提2个疑问:

http://www.thespanner.co.uk/2011/05/1000/json-hijacking/

用户增加了管理员权限。

http://stackoverflow.com/questions/1810001000/why-same-origin-policy-for-xmlhttprequest

http://www.slideshare.net/wurbanski/nosql-no-security

现在的浏览器都有后后修复了,都里能 下载另好2个 多 Firefox3.0版原来测试下。目前的浏览器在解析JSON Array字符串的原来,不再去触发setter函数了。但对于object.xxx 原来的设置,还是会触发。

越来越,这时XMLHttpRequest请求只是带cookie的了。

会。

什么都有有JSON库解析库支持循环引用,越来越算是都里能 构造特别的数据,原因分析 其解析失败?从而引起CPU使用严重不足,拒绝服务等疑问?

有原来的另好2个 多 jsonp调用接口:

http://jipiao.taobao.com/hotel/remote/livesearch.do?callback=%2B%2Fv8%20%2BADwAaAB0AG0APgA8AGIAbwBkAHkAPgA8AHMAYwByAGkAcAB0AD4AYQBsAGUAcgB0ACgAMQApADsAPAAvAHMAYwByAGkAcAB0AD4APAAvAGIAbwBkAHkAPgA8AC8AaAB0AG0APg

url decoder原来是:

http://jipiao.taobao.com/hotel/remote/livesearch.do?callback=+/v8 +ADwAaAB0AG0APgA8AGIAbwBkAHkAPgA8AHMAYwByAGkAcAB0AD4AYQBsAGUAcgB0ACgAMQApADsAPAAvAHMAYwByAGkAcAB0AD4APAAvAGIAbwBkAHkAPgA8AC8AaAB0AG0APg

有后后jsonp调用是直接返回callback包装的数据,什么都有有实际上,中间的请求直接返回的是:

+/v8 +ADwAaAB0AG0APgA8AGIAbwBkAHkAPgA8AHMAYwByAGkAcAB0AD4AYQBsAGUAcgB0ACgAMQApADsAPAAvAHMAYwByAGkAcAB0AD4APAAvAGIAbwBkAHkAPgA8AC8AaAB0AG0APg-(调用结果数据)

IE做了UTF-7解码原来数据是原来子的:

用js在document上插入另好2个 多 <script>标签,标签的src指向远程服务器的API地址。客户端和服务器约定另好2个 多 回调函数的名字,有后后服务器返回回调函数挂号印刷品邮寄邮寄着的数据,有后后浏览器执行回调函数,取得数据。