常见WEB漏洞:JSONP安全与防御

01 JSONP


1.1 JSONP的概念

浏览器的同源策略使得比如 a.com 的网站没法直接获取 b.com 的相关数据,那么假如在一些应用场景一定要获取怎么办?JSONP就是一种解决方式,所以说它是解决跨域请求资源而产生的解决方案。

v2-aeaf3c6da06e86a587134d375d0b9249_b.jpg


1.2 JSONP场景示例

类似腾讯或者网易这种大公司,通常采用一套用户系统,在一个地方登陆,其他地方就免登陆,那么专门用作登陆的站点域名是login.b.com,那么 a.com 这个也是网易的网站希望读取登陆用户的信息怎么办?可以由login.b.com提供一个JSONP的数据接口:comment.money.163.com/r

v2-e93fe221d5d026f8ce91152e113faf9d_b.jpg



login.b.com网站提供的 JSON 格式:

v2-0eb8721cd1bfa390a4e363702a5c40cc_b.jpg


a.com 网站获取登录信息的代码:

v2-bf2a3a501c14ddf00809871f04c9abf2_b.jpg



或者 a.com 网站获取登录信息的代码也可以这样:

v2-8d13d2fcea908273f5ccc0c619546cea_b.jpg


如果黑客恶意伪造类似 a.com 获取登录信息的代码就可劫持登录信息了,这就是一种JSON 劫持攻击,也叫做JSON Hijacking。

v2-c69c234d4d9ccb510f1bd171336cb83a_b.jpg


JSON劫持的产生原因,重点还是在于对调用方没有做判断,或者说他的这种接口地址是固定的或者可猜测的。是不是有点像CSRF,其实JSON劫持,你也可以理解为CSRF的一种应用场景。



02 JSONP的另一种安全问题


2.1 产生XSS 问题

v2-f4bc8945529d67e5ffa243b753512a7f_b.jpg


在上面163的JSON接口中,data_163是可以修改的,我们改为为 test,可以看到 test竟然也是直接显示出来了:

v2-03bf19ab1feae42a8d7fb08292265cfa_b.jpg


我们可以想到另外一个漏洞,就是输入什么,然后显示什么出来,没错,就是 XSS。

2.2 产生 XSS 是有条件的

v2-e7a2f6d8e49a1f2fcded65cbc6bd1964_b.jpg


一旦如果开发不严谨,没有对Content-Type进行设置或者为text/html等,可以将内容解析为html的就可能导致XSS的产生。在实际攻击的时候,我们把data_163替换为XSS的payload,比如<img src=0 οnerrοr=alert(0)>,就会触发弹窗。

v2-75f021eb967e273b371874f580971bc1_b.jpg




03 JSONP安全问题的防御


3.1 JSON 劫持的防御

JSON 劫持的防御,其实我们在说原因的时候有点到,重点其实就在于对调用方没有进行验证,那么对应的防御措施就比如:

  • 验证referer,也就是验证调用方;
  • 增加随机Token。


3.2 对产生XSS问题的防御

对于XSS问题,我们从原理入手,最主要的就是:

  • 设置正确的Content-Type;
  • 可以通过对callback函数的长度进行限制、内容进行特殊字符的过滤,这块可以参考XSS的防御方法。


——————————————————————————————————————

觉得内容不错的麻烦大佬们点个赞呀~

更多WEB安全学习内容请关注【破壳学院】公众号

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值