ajax csrf php,Laravel中Ajax调用时的CSRF对策
我最讨厌在文章开头重复一些基础知识了…… 但是大家都这么做(-__-)b
CSRF是”cross site request forgery”的意思,简单来说就是防止恶意页面中一个简单的form提交,就向你保持了登陆状态了网站里请求做一些你不想做的事情……言尽于此,我们之间看Laravel里的CSRF相关的内容吧!
Laravel(5以后)有个默认的CSRF middleWare,所有POST,PUT请求都会经过这个middleWare,看有没有csrf的token存在并且匹配,不存在的话就会抛出错误页面。提一句,如果做微信接口的话,一定要在接口地址上把这个middleWare给去掉,因为微信大多数都是把数据POST过来的,而你不能奢望微信给你附上一个csrf_token。。。
在Laravel的表单中,埋入一个就可以在表单请求的时候发出正确的token,这样就不会有问题了,而在ajax请求的时候呢,方法多多~
1. 如果你是用ajax submit一个已经存在的form,那么就和平常一样,把csrf藏在表单里就好了,万事大吉。
2. 如果你不是提交表单,那么就要考虑将token值放在一个什么地方,比如还是一个input中,然后ajax提交的时候去读取这个input,附在提交值中。
3. 当然,token值也可以不放在提交的值中,而放在headers里,如果你的js脚本直接写在blade模板里,可以用
JavaScript
$.ajaxSetup({
headers: { 'X-CSRF-TOKEN' : '{{ csrf_token() }}' }
});
1
2
3
$.ajaxSetup({
headers:{'X-CSRF-TOKEN':'{{ csrf_token() }}'}
});
来把token值提交给服务器。
4. 当然很多时候js是在静态文件里的,那么可以把token值放在html的meta里,就像这样
PHP
1
这样就能用
JavaScript
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('meta[name="_token"]').attr('content')
}
});
1
2
3
4
5
$.ajaxSetup({
headers:{
'X-CSRF-TOKEN':$('meta[name="_token"]').attr('content')
}
});
5. 然而以上的方法都不够帅!!!因为你总是要在页面的什么地方调用csrf_token()输出这个值,然后用js脚本获得这个值~
我看Laravel源码的时候发现,Laravel默认会把CSRF_TOKEN的值写在一个叫XCRF-TOKEN的cookie中,其实每次访问这个值都会发生变化,那我们只要用这个值就好了嘛,下面就是见证奇迹的时刻(好古老的梗):
JavaScript
$.ajaxSetup({
headers: {
'X-XSRF-TOKEN': $.cookie('XSRF-TOKEN')
}
});
1
2
3
4
5
$.ajaxSetup({
headers:{
'X-XSRF-TOKEN':$.cookie('XSRF-TOKEN')
}
});
在某个全局地方调用这个就好了,你不需要再手动输出token了(当然你要用cookie插件)!注意这里的XSRF而不是CSRF了。
ajax csrf php,Laravel中Ajax调用时的CSRF对策相关推荐
- laravel token ajax,Laravel中ajax post操作需要传递csrf token的最优化解决方式
在Laravel框架中为了防止csrf攻击,规定只要是post操作都要传递_token值,如果是普通表单那么只要在form中添加@csrf代码就可以了,如果采用ajax方式提交post请求时,最简单的 ...
- jquery中ajax完整例子get,jq的ajax方法,jquery中ajax完整例子
jq的ajax方法,jquery中ajax完整例子 相较与js异步对象的繁琐,jq的ajax对象结构更加清晰 一:ajax对象简述 ajax(Asynchronous JavaScript and X ...
- vue赋值与ajax什么区别,Vue中ajax返回的结果赋值
这是第二次在项目中遇到此问题,ajax请求成功后在success函数中为Vue实例data里的变量赋值,却失败了 new Vue({ el:'#app', data:{ msg:'' }, creat ...
- 调用$.ajax不成功,jquery中ajax请求后台数据成功后既不执行success也不执行error的完美解决方法...
jquery中ajax请求后台数据成功后既不执行success也不执行error,此外系统报错:Uncaught SyntaxError: Unexpected identifier at Objec ...
- jquery ajax实例get,jQuery中ajax的get()方法用法实例
本文实例讲述了jQuery中ajax的get()方法用法.分享给大家供大家参考.具体分析如下: $.get()通过 HTTP GET请求从服务器上请求数据. 语法结构: $.get(url, [dat ...
- laravel中ajax使用
ajax基本格式: $.ajax({url: "/user/" + user_id + "/unfan",method: "POST",// ...
- mvc ajax get请求,springMVC 中 ajax get 请求和 post 请求的坑以及参数传递
1, ajax 请求 无论为 post ,或者 get ,url中带有?形式的参数,后台都能以String类型变量接收,变量名称和参数名称必须一致 前台ajax: $.ajax( "prod ...
- ajax php 区别,PHP中AJAX比较(转)
PHP AJAX 除了??人知的 SAJAX.JPSPAN (原名?ScriptServer) 之外,Sourceforge 近期可下?的 PHP AJAX 又多了 xajax .AJASON.flx ...
- ajax 服务器压力,web中ajax请求后台的节流方式,减轻服务器压力
场景 web前端中有一些需要与后台一起完成的用户体验,比如输入提示,下拉搜索等,监听键盘事件或者websocket流等不断的通过ajax向后台发送请求,获取详情的数据,而页面中的oninput,mou ...
最新文章
- 泪目!兰大硕导的《致谢》火了:我从来不曾优秀过,也从来不曾放弃过!
- Python2安装教程(以最终版本Python2.7.18为例)
- 关于Web应用程序数据库连接的使用
- 简约之美Jodd-http--深入源码理解http协议
- Centos安装Xen总结
- P2657-[SCOI2009]windy数【数位dp,dfs】
- Mantle--国外程序员最常用的iOS模型字典转换框架
- php l方法,ThinkPHP的L方法使用简介
- JAVA进阶教学之(IO流)
- arithmetic java_Java:Arithmetic
- bartender的安全策略不允许指定的用户执行此操作_Linux sudo 被曝提权漏洞,任意用户均能以 root 身份运行命令...
- MyBatis全局配置文件和映射文件
- python time库_python中time库的实例使用方法
- python中tab的用法_详解Python中expandtabs()方法的使用
- 一个模拟抛硬币的游戏
- 一线数据分析师教你如何写简历才能脱颖而出!
- LSB 图像隐写与提取算法
- 【毕业设计】单片机智能鱼缸系统 - 嵌入式 物联网 stm32
- 2018/10/25 模拟赛 纸牌
- 语言独立性和与语言无关的组件