Jsonp劫持攻击理解

Jsonp的劫持

Ajax、Jsonp和Json的区别

Ajax:web端通过GET或POST等HTTP协议请求从外部获取数据并进行数据的处理,默认不能跨域(域名端口相同原则),但可以通过代理跨域;

$.ajax({
url:‘请求地址’,
type: ‘请求方式: 默认是’GET’,常用的还有’POST’ ',
dataType: ‘设置返回的数据格式,常用的是’json’格式,也可以设置为’html’ ‘,
data: ‘设置发送给服务器的数据’,
success: ‘设置请求成功后的回调函数’,
error: ‘设置请求失败后的回调函数’,
async: ‘设置是否异步,默认值是’true’,表示异步’;
})
简写 :
$.get("/change_data", {‘code’:300268},
function(dat){
alert(dat.name);
});
$.post("/change_data", {‘code’:300268},
function(dat){
alert(dat.name);
});

json是一种数据格式:{"name": "John Doe", "age": 18, "address": {"country" : "china", "zip-code": "10000"}}

jsonp通过js script脚本中的src元素来获取外部的数据,请求方法仅有GET方法,根据同源策略的限制,jsonp是可以跨域的(src熟悉的一般都可以跨域)。

json很容易理解,Ajax 和jsonp相同点都是用来请求外部数据,不同点主要在能否跨域,Ajax可用兼容jsonp,通过dataType:jsonp 来实现跨域。

$(function () {
var user = {
“username”: “HelloWorld”
};
$.ajax({
url: “http://localhost:8080/Chengxuyuan/UserInfo”,
type: “GET”,
contentType: “application/json; charset=utf-8”,
dataType: “jsonp”, //json不支持跨域请求,只能使用jsonp
data: {
user: JSON.stringify(user)
},
jsonp: “callback”, //传递给请求处理程序或页面的,用以获得jsonp回调函数名的参数名,默认为callback
jsonpCallback: “userHandler”,//自定义的jsonp回调函数名称,默认为jQuery自动生成的随机函数名,也可以写”?",jQuery会自动为你处理数据
success: function (data) {
$("#user_name")[0].innerHTML = data.user_name;
$("#user_teleNum")[0].innerHTML = data.user_teleNum;
$("#user_ID")[0].innerHTML = data.user_ID;
},
error: function () {
alert(“请求超时错误!”);
}
})
});

Jsonp应用理解

以Server A 和ServerB为例,ServerA 某页面展示的是ServerB存储的一些数据资料,比如彩票数据,那么ServerA页面head部分就需要通过js来加载获取这些数据到本页面进行展示,相当于,某用户访问ServerA页面,当前页面在浏览器上通过Ajax向ServerB发起查询请求,ServerB如果直接提供数据结果给A,就结束了,但是,浏览器同源的策略,浏览器在通过Ajax请求时发现当前页面属于ServerA域,突然访问ServerB,浏览器就拒绝执行请求,用户在当前页面就看不到彩票的数据,这时候,Jsonp就起作用了,Ajax如果请求的类型是Jsonp,浏览器一看,Jsonp类型,可以跨域,放行,当前页面就能获取到ServerB的数据。
更简单的理解:ServerB就存储了一个JSON格式的数据,ServerA通过用户浏览器直接过去取Json数据,浏览器考虑到安全因素是不允许的,那么通过Jsonp 构造成callback({“json”:“彩票数据”}) 类似于js格式数据返回给浏览器,浏览器就可以接受,ServerB只是吐数据,数据的处理现实都是在用户浏览器上通过JS来实现的。

Jsonp 劫持

在这里插入图片描述
劫持的数据是ServerB的数据,劫持危害产生的影响也是由ServerB给出的数据重要性来确认(用户的敏感数据、彩票数据),相当于原先的ServerA是攻击者控制的,因此Jsonp的回调函数也是由攻击者可控,那么受害者访问A 页面,通过Callback({“json”:“当前用户敏感数据”})获取B接口数据,并返回到用户浏览器,下一步就是在用户浏览器上执行callback函数了,如果攻击者把Callback函数添加alert(“当前敏感数据”)操作,用户在A当前页面就看到一个弹窗,是不是跟XSS效果类似,如果攻击者的Callback函数是做POST操作,当前用户从B获取的数据就会被自动转发给攻击者啦,与XSS窃取发送Cookie很相似啊。

参考资料

[1] https://blog.csdn.net/weixin_42614080/article/details/90710292
[2] https://www.cnblogs.com/happystudyhuan/p/11583384.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值