首页 > php框架 > Laravel > 正文

Laravel如何保护应用免受CSRF攻击?(原理和示例)

穿越時空
发布: 2025-12-16 09:20:03
原创
363人浏览过
Laravel 默认通过 CSRF 中间件和 @csrf 指令防护 CSRF 攻击,原理是比对请求 token 与 session 中存储的随机加密 token 是否一致;AJAX 需手动设置 X-CSRF-TOKEN 请求头;api/、_ignition/、telescope/ 路由默认豁免验证。

laravel如何保护应用免受csrf攻击?(原理和示例)

Laravel 默认通过 CSRF 中间件和隐藏表单字段自动防护 CSRF 攻击,核心是验证每次非 GET 请求携带的 token 是否与服务端会话中存储的一致。

CSRF 保护原理

Laravel 在用户首次访问时生成一个随机、加密的 CSRF token,并存入当前 session。后续所有 POST、PUT、PATCH、DELETE 等非安全请求,都必须携带该 token(通常放在表单 hidden 字段或请求头中)。服务端收到请求后,比对提交的 token 和 session 中保存的是否匹配——不一致则拒绝请求,返回 419 状态码。

这个机制有效是因为:攻击者无法读取目标站点的响应内容(受同源策略限制),也就拿不到合法用户的 token,无法构造出带正确 token 的恶意请求。

表单中自动插入 CSRF token

在 Blade 模板中,使用 @csrf 指令即可插入隐藏字段:


  @csrf
  
  

渲染后等价于:

达芬奇
达芬奇

达芬奇——你的AI创作大师

达芬奇 166
查看详情 达芬奇

AJAX 请求如何携带 token

前端 JavaScript 发起 AJAX 请求时,需手动设置 X-CSRF-TOKEN 请求头:

  • 先从 meta 标签中读取 token(Laravel 默认在 app.blade.php 中注入):
  • 然后在 JS 中统一设置 axios 或 jQuery:
// Axios 示例
axios.defaults.headers.common['X-CSRF-TOKEN'] = document.querySelector('meta[name="csrf-token"]').getAttribute('content');

// jQuery 示例
$.ajaxSetup({
  headers: {
    'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
  }
});

哪些路由默认豁免 CSRF 验证

Laravel 将以下路径前缀下的路由自动排除在 VerifyCsrfToken 中间件之外:

  • api/(API 路由组,默认无 session,用 token 认证)
  • _ignition/(调试工具 Ignition)
  • telescope/(Telescope 监控面板)

如需自定义豁免规则,可在 app/Http/Middleware/VerifyCsrfToken.php$except 数组中添加路径模式,例如:
protected $except = ['stripe/webhook', 'webhook/*'];

基本上就这些。不复杂但容易忽略的是:AJAX 请求漏设 header、手动构造表单忘了 @csrf、或误将 API 路由放到 web 中间件组里——这三类最容易引发 419 错误。

以上就是Laravel如何保护应用免受CSRF攻击?(原理和示例)的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号