jsonp劫持漏洞研究与防范

本文介绍了JSONP的概念,它是如何绕过浏览器的同源策略进行跨域数据获取的。同源策略是浏览器的一项安全策略,防止不同源之间的信息窃取。然而,JSONP通过指定回调函数的方式允许跨域请求。文章展示了JSONP劫持的示例,说明了如果恶意网站利用JSONP,可能对用户信息造成安全隐患。为了防范,文中提出了几点建议,包括严格的CSRF防护、规范JSON输出格式和过滤回调函数等。
摘要由CSDN通过智能技术生成

背景知识

jsonp

Jsonp(JSON with Padding) 是 json 的一种"使用模式",可以让网页从别的域名(网站)那获取资料,即跨域读取数据,也就是说可以通过这个技术,绕过同源策略。

JSONP 由两部分组成:回调函数和数据。回调函数是当响应到来时应该在页面中调用的函数。回调函数的名字一般是在请求中指定的。而数据就是传入回调函数中的 JSON 数据。

同源策略

同源策略(Same Origin Policy),它是由 Netscape 提出的一个著名的安全策略,现在所有支持 JavaScript 的浏览器都会使用这个策略。

浏览器的同源策略规定:不同域的客户端脚本在没有明确授权的情况下,不能读写对方的资源。“同源”的前提如下:

域名
协议
tcp端口号

只要两个url的以上三个值是相同的,我们就认为这两个url资源是同源的。

同源策略在浏览器上默认实现,目的就是防止不同网站之间的信息窃取。比如有如下场景:

比如你吃着火锅、唱着歌、访问着网站A,而且网站A有个可以返回个人信息的敏感信息接口:http://5wimming.a.com/info
这时候你的在浏览器上同时还打开了某不知名的P 站,这个网站偷偷执行了个js,访问http://5wimming.a.com/info接口,并将获取的信息上传回P 站服务器

这时候同源策略的作用就出来了,浏览器会判断上面网站P和网站A是否同源,如果不同源,则网站P的窃取接口将获取不到数据。

当然,也有例外情况,这里举两种:
1、网站A在返回头中设置了Access-Control-Allow-Origin 值允许网站P的访问,如:

Access-Control-Allow-Origin: http://www.p.com

2、网页中有几个标签是对同源策略免疫的,

<img> 的 src 
<link> 的 href 
<script> 的 src 

JSONP劫持

JSONP 就是利用其中的

🌰栗子

我们找个网站,通过搜索关键词,看看有没有使用jsonp技术,一般关键词有:

jsonp
callback
jsonpcallback
jsoncallback
jsonpcall
jsoncall
jsoncb
jsonpcb
...

比如下面某不愿透漏姓名的网站,有一个jsonp链接,当然该链接并没有敏感信息,这里作为一个🌰

https://tousu.sina.com.cn/api/int_prom/get?channel=5&callback=heimaosuccess&dpc=1

在这里插入图片描述
然后我们做一个本地payload,将下面信息保存在本地,并命名为jsonp.html,注意链接中的回调函数需要跟自定义的函数名相同,这里为heimaosuccess

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>JSONP jack</title>
</head>
<body>
<script type="text/javascript">
function heimaosuccess(result)
        {
            alert(result.result.timestamp);
        }
</script>
<script type="text/javascript" src="https://tousu.sina.com.cn/api/int_prom/get?channel=5&callback=heimaosuccess&dpc=1"></script>
</body>
</html>

通过浏览器访问该html文件,发现可以获取相关信息
在这里插入图片描述
现实中,如果把这个恶意js放在某个恶意网站上,只要受害者访问了该恶意网站,并且同时开了目标网站,就可以偷偷的收集大量信息,然后惊艳所有人,说不定还能在某个管吃管住的地方见到吴 签

防范

1、严格安全的实现 CSRF 方式调用 JSON 文件:限制 Referer 、部署一次性 Token 等。

2、严格安装 JSON 格式标准输出 Content-Type 及编码( Content-Type : application/json; charset=utf-8 )。

3、严格过滤 callback 函数名及 JSON 里数据的输出。

4、严格限制对 JSONP 输出 callback 函数名的长度(如防御上面 flash 输出的方法)。

5、其他一些比较“猥琐”的方法:如在 Callback 输出之前加入其他字符(如:/**/、回车换行)这样不影响 JSON 文件加载,又能一定程度预防其他文件格式的输出。还比如 Gmail 早起使用 AJAX 的方式获取 JSON ,听过在输出 JSON 之前加入 while(1) ;这样的代码来防止 JS 远程调用。

参考:
1、https://www.runoob.com/json/json-jsonp.html
2、https://xz.aliyun.com/t/10051
3、https://www.cnblogs.com/happystudyhuan/p/11583384.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值