谈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能够跨域的原因在于 标签允许跨域。
    通过script拿到数据,形如
    将会返回 foo(data)打在前端
    前端再定义function foo(){},返回前端时就直接调用并传入数据。
    缺点:
    限于GET方法
    一样无法自定义设置header和cookie。
  3. 代理
    本地设置代理,ajax请求本地代理,再由本地通过非ajax方法去请求数据,返回给前端。不考虑。但是在某些情况下可以用,比如payload中需要拼接由跨域获取的数据。

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

FORM表单请求的方式当然也没法设置header。

结论 CSRF/JSONP劫持中所用请求难以自定义header、cookie

原文地址:https://www.cnblogs.com/huim/p/11005903.html

时间: 2024-10-09 11:41:45

谈CSRF与JSONP设置header问题的相关文章

IOS NSURLRequest 设置 Header

工程中的请求,需要设置Header,请求令牌才访问,NSURLRequest 请求没有直接设置header 的方法,需要通过NSMutableURLRequest 来实现 一 NSURLRequest 设置 //1.创建request NSURLRequest *request = [NSURLRequest requestWithURL:URL]; //2.创建一个 NSMutableURLRequest 添加 header NSMutableURLRequest *mutableReques

http设置header

1.httpPost 设置header,header内容是在发送请求的头文件里面 HttpPost httpPost = new HttpPost(url); 如: Accept text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Encoding gzip, deflate Accept-Language zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3 2.StringEntity

PHP使用CURL设置header头传参以及设置Content-Type: application/json类型的后台数据接收

CURL函数 public function CurlRequest($url,$data=null,$header=null){ //初始化浏览器 $ch = curl_init(); //设置浏览器,把参数url传到浏览器的设置当中 curl_setopt($ch, CURLOPT_URL, $url); //以字符串形式返回到浏览器当中 curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); //禁止https协议验证域名,0就是禁止验证域名且兼容p

POSTMAN的get请求不支持设置header

原因参考这篇 http://blog.csdn.net/sylvilagus/article/details/50233335 postman是基于浏览器的插件,发出的请求都是通过调用ajax/xmlhttprequest的方式,必然受到浏览器的安全限制: 首先 XMLHttpRequest 出于安全考虑是不支持跨域的, 这一点postman已经向浏览器声明了需要跨域的权限 其次,部分header同样由于安全原因,是无法在浏览器中set的,受制于浏览器的用户特性 具体哪些header不能set,

express 设置header解决跨域问题

//设置跨域访问 app.all('*', function(req, res, next) { res.header("Access-Control-Allow-Origin", "*"); res.header("Access-Control-Allow-Methods", "GET,HEAD,OPTIONS,POST,PUT"); // res.header("Access-Control-Allow-Head

浅谈CSRF漏洞

前言: 看完小迪老师的CSRF漏洞讲解.感觉不行 就自己百度学习.这是总结出来的. 歌曲: 正文: CSRF与xss和像,但是两个是完全不一样的东西. xss攻击(跨站脚本攻击)储存型的XSS由攻击者和受害者一同完成.xss详细介绍:点我跳转 CSRF(跨站脚本伪造)完全由受害者完成.攻击者不参与其中.CSRF详细介绍:点我跳转 CSRF原理: 银行转账的数据包:http://jianse.com/zhuanzhang.php?name=lu&[email protected]&monet

浅谈CSRF(Cross-site request forgery)跨站请求伪造(写的非常好)

一 CSRF是什么 CSRF(Cross-site request forgery)跨站请求伪造,也被称为“One Click Attack”或者Session Riding,通常缩写为CSRF或者XSRF,是一种对网站的恶意利用.尽管听起来像跨站脚本(XSS),但它与XSS非常不同,XSS利用站点内的信任用户,而CSRF则通过伪装来自受信任用户的请求来利用受信任的网站.与XSS攻击相比,CSRF攻击往往不大流行(因此对其进行防范的资源也相当稀少)和难以防范,所以被认为比XSS更具危险性 可以这

django 浅谈CSRF(Cross-site request forgery)跨站请求伪造

一 CSRF是什么 二 CSRF攻击原理 三 CSRF攻击防范 回到目录 一 CSRF是什么 CSRF(Cross-site request forgery)跨站请求伪造,也被称为"One Click Attack"或者Session Riding,通常缩写为CSRF或者XSRF,是一种对网站的恶意利用.尽管听起来像跨站脚本(XSS),但它与XSS非常不同,XSS利用站点内的信任用户,而CSRF则通过伪装来自受信任用户的请求来利用受信任的网站.与XSS攻击相比,CSRF攻击往往不大流行

『电脑技巧』浅谈Win7的文件共享设置

随着移动存储设备的普及,很少有小伙伴喜欢使用局域网“文件共享”这一捷径了 而且自从XP之后,Windows系列主机共享设置貌似比较麻烦 虽然事实并不是看上去那样(Win7也很Easy的说 = =) 现在开始演示在Win7系统上共享文件 0x 01 开启文件共享功能 右键桌面任务栏右侧网络连接图标,依次打开 网络和共享中心—更改高级共享设置 接下来依据主机接入网络的方式点开家庭或工作,或是公用 把前三个启用都给选上,如下: 之后把页面底部的“关闭密码保护共享”选上,这样做对方在访问你的共享文件时不