laravel框架中前端如何使用csrf

Php   Laravel  

CSRF是”cross site request forgery”的意思,简单来说就是防止恶意页面中一个简单的form提交,Laravel(5以后)有个默认的CSRF middleWare,所有POST,PUT请求都会经过这个middleWare,看有没有csrf的token存在并且匹配,不存在的话就会抛出错误页面。

1.表单提交

在Laravel的表单中,埋入一个就可以在表单请求的时候发出正确的token,这样就不会有问题了。

  1. <form action="photo/12" method="post">
  2. {{ csrf_field() }}
  3. <input type="submit" name="提交" />
  4. </form>

2.ajax提交

如果你不是提交表单,那么就要考虑将token值放在一个什么地方,比如还是一个input中,然后ajax提交的时候去读取这个input,附在提交值中。

当然,token值也可以不放在提交的值中,而放在headers里,如果你的js脚本直接写在blade模板里,可以用

  1. $.ajaxSetup({
  2. headers: { 'X-CSRF-TOKEN' : '{{ csrf_token() }}' }
  3. });

来把token值提交给服务器。

当然很多时候js是在静态文件里的,那么可以把token值放在html的meta里,就像这样

  1. <meta name="_token" content="{{ csrf_token() }}"/>

这样就能用

  1. $.ajaxSetup({
  2. headers: {
  3. 'X-CSRF-TOKEN': $('meta[name="_token"]').attr('content')
  4. }
  5. });

另外,Laravel默认会把CSRF_TOKEN的值写在一个叫XCRF-TOKEN的cookie中,其实每次访问这个值都会发生变化,那我们只要用这个值就好了嘛。

  1. $.ajaxSetup({
  2. headers: {
  3. 'X-XSRF-TOKEN': $.cookie('XSRF-TOKEN')
  4. }
  5. });

在某个全局地方调用这个就好了,你不需要再手动输出token了(当然你要用cookie插件)!注意这里的XSRF而不是CSRF了。



评论 0

发表评论

Top