zoukankan      html  css  js  c++  java
  • 谈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标签允许跨域。
      通过script拿到数据,形如 <script src="http://xxx/a.html?callback=foo">
      将会返回 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

  • 相关阅读:
    P3383 【模板】线性筛素数
    【模板】矩阵乘法快速幂
    【模板】线性筛素数
    【模板】快速幂
    【模板】归并排序求逆序对
    【模板】归并排序模板
    luogu 1084 疫情控制
    luogu 3155 [CQOI2009]叶子的染色
    luogu 1453 城市环路
    luogu 2607 [ZJOI2008]骑士
  • 原文地址:https://www.cnblogs.com/huim/p/11005903.html
Copyright © 2011-2022 走看看