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
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!