Laravel - CSRF 攻击与防御

CSRF 攻击与防御 - start#

  • 什么事 CSRF 攻击?
    • CSRF 是跨站请求伪造(Cross-site request forgery)的英文缩写。
    • 跨站请求伪造是一种通过伪装授权用户的请求来利用授信网站的恶意漏洞。
  • 日常生活中我们应当怎样预防 CSRF 攻击?

    • Laravel 自动为每个用户 Session 生成了一个 CSRF Token,该 Token 可用于验证登录用户和发起请求者是否是同一人,如果不是则请求失败。正是根据本特性,Laravel 则提供了两个辅助函数:
      {{ csrf_field() }} 辅助函数和{{csrf_token()}}辅助函数。

    • 在我们提交表单的时候,必须要在 form 表单里面加入下列中的其中一行代码,使其生成一个隐藏域:
      <input type="hidden" name="_token" value="{{csrf_token()}}">
      或者
      {{csrf_field()}}
      这两个函数生成的是同一个隐藏域,表单内容如下:
      <input type="hidden" name="_token" value="4odLZvJowyNLTSATEbAn67mkua6rwFNIGJZqKlfH">
      在每一个 POST 提交后,都必须要有这个隐藏域,这样就避免了 CSRF 攻击。

  • 从 CSRF 保护中排除指定 URL
    • 要实现这一目的,只需要在 (app/Http/Middleware/VerifyCsrfToken.php)中间件中将要排除的 URL 添加到 $except 数组中即可。
  • Ajax 设置 CSRF-Token
    • 页面设置 head 中设置:
      <meta name="csrf-token" content="{{ csrf_token() }}">
    • 基于 AJAX 的应用提供了简单、方便的方式来避免 CSRF 攻击:
      $.ajaxSetup({
              headers: {
                  'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
              }
      });

CSRF 攻击与防御 - end#

本作品采用《CC 协议》,转载必须注明作者和本文链接
老郭博客:laughing: 个人博客地址:www.phpsix.com
PHPSIX
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。