谈CSRF与JSONP设置header问题

时间: 2019-06-11阅读: 51标签: ajax

问题一 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,利用时需要跨域。


CORS

简单来说,请求时浏览器检测到跨域,会带上Origin,得到服务器的准许后才能够获取数据。

CORS不仅设置了AJAX跨域时的域名,还有请求方法、返回Header获取字段、允许发送cookie等

浏览器同源政策及其规避方法(阮一峰)

CORS需要大多数情况下,前端是无感知的,这是后端服务器做的部分。


JSONP

JSONP能够跨域的原因在于 标签允许跨域。

通过script拿到数据,形如 

将会返回 foo(data)打在前端

前端再定义function foo(){},返回前端时就直接调用并传入数据。

缺点:

限于GET方法

一样无法自定义设置header和cookie。


代理

本地设置代理,ajax请求本地代理,再由本地通过非ajax方法去请求数据,返回给前端。不考虑。但是在某些情况下可以用,比如payload中需要拼接由跨域获取的数据。


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


结论 

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



ajax提交 使用css 控制按钮防止重复点击

有时候遇到ajax提交数据时 多点几次会出现重复点击的情况.所以下面介绍一个用css控制防重复点击的效果,submitting 是一个类 没有任何意思,也可以写成变灰度的效果

JQuery中的ajax

ajax() 方法用于执行 AJAX(异步 HTTP)请求。 所有的 jQuery AJAX 方法都使用 ajax() 方法。该方法通常用于其他方法不能完成的请求。语法

ajax请求中的contentType和dataType

contentType设置你发送给服务器的格式,有以下三种常见情况。application/x-www-form-urlencoded :默认值,application/json:服务端消息主体是序列化后的 JSON 字符串。

ajax 高级技术

ajax技术是一种从客户端向服务器请求数据的技术,而如果是要将数据从服务器主动推向客户端,那么就需要更加高级的数据传输技术,这些技术主要是为了处理一些在客户端展示服务器上实时变化的数据

ajax是什么?如何创建一个ajax?

ajax(asynchronous javascript and xml)主要用来实现客户端与服务器端的异步通信,实现页面的局部刷新。XMLHttpRequest用于在后台与服务器交换数据。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新。

如何等待ajax完成再执行相应操作

ajax广泛应用于异步请求,对于大多数业务来说,这是十分方便的,但对于一些特殊的业务,ajax的异步性会起到相反的作用。例如在ajax请求成功后,后续的操作需要依赖ajax执行成功后的相应操作。

纯Js实现ajax

这是一个纯js向后台进行post请求的前端实现,未考虑考虑的问题。创建对象,并兼容各种浏览器;请求数据,这里写了两种方法,方法一最开始写的,但是后来发现灵活性不够

Content-Type属性的取值和作用

Content-Type 的值类型:application/json:消息主体是序列化后的 JSON 字符串,application/x-www-form-urlencoded:数据被编码为名称/值对。这是标准的编码格式

Ajax原理以及优缺点

Ajax的原理简单来说通过XmlHttpRequest对象来向服务器发异步请求,从服务器获得数据,然后用javascript来操作DOM而更新页面。这其中最关键的一步就是从服务器获得请求数据。要清楚这个过程和原理,我们必须对 XMLHttpRequest有所了解。

Ajax 解决浏览器的缓存问题

ajax能提高页面载入的速度主要的原因是通过ajax减少了重复数据的载入,也就是说在载入数据的同时将数据缓存到内存中,一旦数据被加载其中,只要我们没有刷新页面,这些数据就会一直被缓存在内存中,当我们提交 的URL与历史的URL一致时

fly63.com版权所有,内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权,请与小编联系!情况属实本人将予以删除!

广告赞助文章投稿关于web前端网站点搜索站长推荐网站地图站长QQ:522607023

小程序专栏: 土味情话心理测试脑筋急转弯幽默笑话段子句子语录成语大全