谈CSRF与JSONP设置header问题

匿名 (未验证) 提交于 2019-12-02 23:40:02

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

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

方法二
通过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}); });

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

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

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等。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!