谈CSRF与JSONP设置header问题

关于前端发起请求
问题一 JS发起请求的方式

方法一
JS代码中发起请求的方式普遍为AJAX

该技术在 1998 年前后得到了应用。允许客户端脚本发送HTTP请求(XMLHTTP)

方法二
script标签请求

方法三
通过HTML的方法
通过js自动在jsp中创建一个form表单,并给其method属性为post

function post(URL, PARAMS) {        
    var temp = document.createElement("form");        
    temp.action = URL;        
    temp.method = "post";        
    temp.style.display = "none";        
    for (var x in PARAMS) {        
        var opt = document.createElement("textarea");        
        opt.name = x;        
        opt.value = PARAMS[x];               
        temp.appendChild(opt);        
    }        
    document.body.appendChild(temp);        
    temp.submit();        
    return temp;        
}        

$(".submit_d a").click(function(){
    var data = ($(this).attr("class")).split("-");
    var series = data[0];
    var discharge = data[1];
    var carriageNum = data[2];
    var seatNum = data[3];
    var gear = data[4];
    var cost = data[5];
    var pictureUrl = data[6];
    var id = data[7];
    post(ctx+"/order/rentcar.action",{"series":series,"discharge":discharge,"carriageNum":carriageNum,"seatNum":seatNum,"gear":gear,"cost":cost,"pictureUrl":pictureUrl,"id":id});
});
问题二 设置header、cookie

CSRF发起的请求可以设置cookie(token)、header么

CSRF或者jsonp,利用时需要跨域。

跨域首先排除掉AJAX方法

AJAX如何跨域

  1. CORS
    简单来说,请求时浏览器检测到跨域,会带上Origin,得到服务器的准许后才能够获取数据。
    CORS不仅设置了AJAX跨域时的域名,还有请求方法、返回Header获取字段、允许发送cookie等
    浏览器同源政策及其规避方法(阮一峰)
    CORS需要大多数情况下,前端是无感知的,这是后端服务器做的部分。
  2. JSONP
    JSONP能够跨域的原因在于
  3. 代理
    本地设置代理,ajax请求本地代理,再由本地通过非ajax方法去请求数据,返回给前端。不考虑。但是在某些情况下可以用,比如payload中需要拼接由跨域获取的数据。

这三种方法都是JS/AJAX跨域的方法。
在CSRF/JSONP劫持的运用上,CORS跨域被限制的情况下不存在了,因此AJAX的GET/POST一堆灵活操作没法用。
JSONP也无法设置header、cookie等。

FORM表单请求的方式当然也没法设置header。
结论 CSRF/JSONP劫持中所用请求难以自定义header、cookie
posted @ 2019-06-11 20:41  huim 阅读( ...) 评论( ...) 编辑 收藏

转载于:https://www.cnblogs.com/huim/p/11005903.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值