我最讨厌在文章开头重复一些基础知识了…… 但是大家都这么做(-__-)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对策相关推荐

  1. laravel token ajax,Laravel中ajax post操作需要传递csrf token的最优化解决方式

    在Laravel框架中为了防止csrf攻击,规定只要是post操作都要传递_token值,如果是普通表单那么只要在form中添加@csrf代码就可以了,如果采用ajax方式提交post请求时,最简单的 ...

  2. jquery中ajax完整例子get,jq的ajax方法,jquery中ajax完整例子

    jq的ajax方法,jquery中ajax完整例子 相较与js异步对象的繁琐,jq的ajax对象结构更加清晰 一:ajax对象简述 ajax(Asynchronous JavaScript and X ...

  3. vue赋值与ajax什么区别,Vue中ajax返回的结果赋值

    这是第二次在项目中遇到此问题,ajax请求成功后在success函数中为Vue实例data里的变量赋值,却失败了 new Vue({ el:'#app', data:{ msg:'' }, creat ...

  4. 调用$.ajax不成功,jquery中ajax请求后台数据成功后既不执行success也不执行error的完美解决方法...

    jquery中ajax请求后台数据成功后既不执行success也不执行error,此外系统报错:Uncaught SyntaxError: Unexpected identifier at Objec ...

  5. jquery ajax实例get,jQuery中ajax的get()方法用法实例

    本文实例讲述了jQuery中ajax的get()方法用法.分享给大家供大家参考.具体分析如下: $.get()通过 HTTP GET请求从服务器上请求数据. 语法结构: $.get(url, [dat ...

  6. laravel中ajax使用

    ajax基本格式: $.ajax({url: "/user/" + user_id + "/unfan",method: "POST",// ...

  7. mvc ajax get请求,springMVC 中 ajax get 请求和 post 请求的坑以及参数传递

    1, ajax 请求 无论为 post ,或者 get ,url中带有?形式的参数,后台都能以String类型变量接收,变量名称和参数名称必须一致 前台ajax: $.ajax( "prod ...

  8. ajax php 区别,PHP中AJAX比较(转)

    PHP AJAX 除了??人知的 SAJAX.JPSPAN (原名?ScriptServer) 之外,Sourceforge 近期可下?的 PHP AJAX 又多了 xajax .AJASON.flx ...

  9. ajax 服务器压力,web中ajax请求后台的节流方式,减轻服务器压力

    场景 web前端中有一些需要与后台一起完成的用户体验,比如输入提示,下拉搜索等,监听键盘事件或者websocket流等不断的通过ajax向后台发送请求,获取详情的数据,而页面中的oninput,mou ...

最新文章

  1. 泪目!兰大硕导的《致谢》火了:我从来不曾优秀过,也从来不曾放弃过!
  2. Python2安装教程(以最终版本Python2.7.18为例)
  3. 关于Web应用程序数据库连接的使用
  4. 简约之美Jodd-http--深入源码理解http协议
  5. Centos安装Xen总结
  6. P2657-[SCOI2009]windy数【数位dp,dfs】
  7. Mantle--国外程序员最常用的iOS模型字典转换框架
  8. php l方法,ThinkPHP的L方法使用简介
  9. JAVA进阶教学之(IO流)
  10. arithmetic java_Java:Arithmetic
  11. bartender的安全策略不允许指定的用户执行此操作_Linux sudo 被曝提权漏洞,任意用户均能以 root 身份运行命令...
  12. MyBatis全局配置文件和映射文件
  13. python time库_python中time库的实例使用方法
  14. python中tab的用法_详解Python中expandtabs()方法的使用
  15. 一个模拟抛硬币的游戏
  16. 一线数据分析师教你如何写简历才能脱颖而出!
  17. LSB 图像隐写与提取算法
  18. 【毕业设计】单片机智能鱼缸系统 - 嵌入式 物联网 stm32
  19. 2018/10/25 模拟赛 纸牌
  20. 语言独立性和与语言无关的组件

热门文章

  1. imx6背光驱动调试
  2. 优秀软件开发者必须具备的能力
  3. 漫谈C++重载运算符
  4. ajax头文件报错,AJAX的CSRF保护
  5. 微众WeCross 跨链平台(8)TTM可信事务机制
  6. 《研磨设计模式》chap22 装饰模式Decorator(2)应用到场景
  7. 编译Bitcoin BCH configure: error: libdb_cxx headers missing ,终于解决了
  8. 初等数论--整除--公因数一定是最大公因数的因数
  9. CTF Re-Python z3库的使用
  10. 深入解析 Kubebuilder:让编写 CRD 变得更简单