【Web安全】JSONP劫持

一、JSONP为何物

JSONP 全称是 JSON with Padding ,是基于 JSON 格式的为解决跨域请求资源而产生的解决方案。他实现的基本原理是利用了 HTML 里 <script></script> 元素标签,远程调用 JSON 文件来实现数据传递。

细致的介绍可以看这:https://blog.csdn.net/hansexploration/article/details/80314948

沿用文章里的观点,jsonp就是使用动态的js调用来实现ajax的效果,却能实现跨域取数据的功能。

二、JSONP劫持

通过JSONP技术可以实现数据的跨域访问,必然会产生安全问题,如果网站B对网站A的JSONP请求没有进行安全检查直接返回数据,则网站B 便存在JSONP 漏洞,网站A 利用JSONP漏洞能够获取用户在网站B上的数据:

  1. 用户在网站B 注册并登录,网站B 包含了用户的id,name,email等信息;

  2. 用户通过浏览器向网站A发出URL请求;

  3. 网站A向用户返回响应页面,响应页面中注册了 JavaScript 的回调函数和向网站B请求的script标签;

  4. 用户收到响应,解析JS代码,将回调函数作为参数向网站B发出请求;

  5. 网站B接收到请求后,解析请求的URL,以 JSON 格式生成请求需要的数据,将封装的包含用户信息的JSON数据作为回调函数的参数返回给浏览器;

  6. 网站B数据返回后,浏览器则自动执行Callback函数对步骤4返回的JSON格式数据进行处理,数据回传到网站A的服务器,这样网站A利用网站B的JSONP漏洞便获取到了用户在网站B注册的信息。

三、防御

jsonp劫持最大的危害就是重要信息如cookie、隐私信息等的泄露,防御方法如下:

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 远程调用。

发布了256 篇原创文章 · 获赞 341 · 访问量 24万+

猜你喜欢

转载自blog.csdn.net/qq_37865996/article/details/104254931