![0fd5e0de22f343a01ab0a0e0f47c6ddb.png](https://i-blog.csdnimg.cn/blog_migrate/7c877d289e14258b13a3e3b6493c7c19.jpeg)
01 JSONP
1.1 JSONP的概念
浏览器的同源策略使得比如 http://www.a.com 的网站没法直接获取 http://www.b.com 的相关数据,那么假如在一些应用场景一定要获取怎么办?JSONP就是一种解决方式,所以说它是解决跨域请求资源而产生的解决方案。
![754be606143e87fb50d63afcb93366a9.png](https://i-blog.csdnimg.cn/blog_migrate/b95547371837c83c0fb8cc6422932549.jpeg)
1.2 JSONP场景示例
类似腾讯或者网易这种大公司,通常采用一套用户系统,在一个地方登陆,其他地方就免登陆,那么专门用作登陆的站点域名是http://login.b.com,那么 http://www.a.com 这个也是网易的网站希望读取登陆用户的信息怎么办?可以由http://login.b.com提供一个JSONP的数据接口:http://comment.money.163.com/reply/check.jsptime=1367240961474&callback=data_163
![ad1b059b0fc8f811879c16875b317be6.png](https://i-blog.csdnimg.cn/blog_migrate/55af62ded2956b0d5be60a95aa915d6a.jpeg)
http://login.b.com网站提供的 JSON 格式:
![06a2a8cea59597970838e6b9a81246f7.png](https://i-blog.csdnimg.cn/blog_migrate/fe39b30f6c179bd8e8c05e35f74806e8.jpeg)
http://www.a.com 网站获取登录信息的代码:
![d5cf288e4ed793ec242f5c3199e32726.png](https://i-blog.csdnimg.cn/blog_migrate/859f9a32c17e5b9656daaf8ec0a9bc47.jpeg)
或者 http://www.a.com 网站获取登录信息的代码也可以这样:
![a9f8682b25e4b13435202af1b7c05f65.png](https://i-blog.csdnimg.cn/blog_migrate/8561450b43e76588efaef5a66d643c67.jpeg)
如果黑客恶意伪造类似 http://www.a.com 获取登录信息的代码就可劫持登录信息了,这就是一种JSON 劫持攻击,也叫做JSON Hijacking。
![7ecf2fc419a064ea115600389e98111d.png](https://i-blog.csdnimg.cn/blog_migrate/65d6472a7ebb0d7e32a195cb8d668f76.jpeg)
JSON劫持的产生原因,重点还是在于对调用方没有做判断,或者说他的这种接口地址是固定的或者可猜测的。是不是有点像CSRF,其实JSON劫持,你也可以理解为CSRF的一种应用场景。
02 JSONP的另一种安全问题2.1 产生XSS 问题
![0c45dc66107cff217e91a7b8ce54974a.png](https://i-blog.csdnimg.cn/blog_migrate/459ebba28e211348508b6f3211ba0d58.jpeg)
在上面163的JSON接口中,data_163是可以修改的,我们改为为 test,可以看到 test竟然也是直接显示出来了:
![46c0f3545356500a9dec7d73bcc48771.png](https://i-blog.csdnimg.cn/blog_migrate/41c350679c70432444fb6197eb825720.jpeg)
我们可以想到另外一个漏洞,就是输入什么,然后显示什么出来,没错,就是 XSS。2.2 产生 XSS 是有条件的
![5d3ca22e7d51ab8d1bb76f0758e64950.png](https://i-blog.csdnimg.cn/blog_migrate/0c9273dcf938641be9814db23e9a8566.jpeg)
一旦如果开发不严谨,没有对Content-Type进行设置或者为text/html等,可以将内容解析为html的就可能导致XSS的产生。在实际攻击的时候,我们把data_163替换为XSS的payload,比如<img src=0 οnerrοr=alert(0)>,就会触发弹窗。
![3f636a694e93aa0901a6fa10eca2a7a9.png](https://i-blog.csdnimg.cn/blog_migrate/47a64263aa6f41bbd3b122b37411e250.jpeg)
03 JSONP安全问题的防御3.1 JSON 劫持的防御
JSON 劫持的防御,其实我们在说原因的时候有点到,重点其实就在于对调用方没有进行验证,那么对应的防御措施就比如:
- 验证referer,也就是验证调用方;
- 增加随机Token。
3.2 对产生XSS问题的防御
对于XSS问题,我们从原理入手,最主要的就是:
- 设置正确的Content-Type;
- 可以通过对callback函数的长度进行限制、内容进行特殊字符的过滤,这块可以参考XSS的防御方法。
——————————————————————————————————————
觉得内容不错的麻烦大佬们点个赞呀~
更多WEB安全学习内容请关注【破壳学院】公众号