Laravel如何保护应用免受CSRF攻击?(原理和示例)
发布时间 - 2025-12-16 00:00:00 点击率:次Laravel 默认通过 CSRF 中间件和 @csrf 指令防护 CSRF 攻击,原理是比对请求 token 与 session 中存储的随机加密 token 是否一致;AJAX 需手动设置 X-CSRF-TOKEN 请求头;api/、_ignition/、telescope/ 路由默认豁免验证。
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 指令即可插入隐藏字段:
渲染后等价于:
AJAX 请求如何携带 token
前端 JavaScript 发起 AJAX 请求时,需手动设置 X-CSRF-TOKEN 请求头:
- 先从 meta 标签中读取 token(Laravel 默认在
app.blade.php中注入):
- 然后在 JS 中统一设置 axios 或 jQuery:
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/(调试工具 Ignitio
n) -
telescope/(Telescope 监控面板)
如需自定义豁免规则,可在 app/Http/Middleware/VerifyCsrfToken.php 的 $except 数组中添加路径模式,例如:
protected $except = ['stripe/webhook', 'webhook/*'];
基本上就这些。不复杂但容易忽略的是:AJAX 请求漏设 header、手动构造表单忘了 @csrf、或误将 API 路由放到 web 中间件组里——这三类最容易引发 419 错误。
# php
# javascript
# laravel
# java
# jquery
# js
# 前端
# ajax
# app
# axios
# 工具
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
Laravel如何使用Service Container和依赖注入?(代码示例)
lovemo网页版地址 lovemo官网手机登录
如何用PHP快速搭建高效网站?分步指南
作用域操作符会触发自动加载吗_php类自动加载机制与::调用【教程】
javascript基本数据类型及类型检测常用方法小结
中国移动官方网站首页入口 中国移动官网网页登录
WEB开发之注册页面验证码倒计时代码的实现
python中快速进行多个字符替换的方法小结
C#如何调用原生C++ COM对象详解
Javascript中的事件循环是如何工作的_如何利用Javascript事件循环优化异步代码?
Laravel广播系统如何实现实时通信_Laravel Reverb与WebSockets实战教程
佐糖AI抠图怎样调整抠图精度_佐糖AI精度调整与放大细化操作【攻略】
Laravel Seeder填充数据教程_Laravel模型工厂Factory使用
Laravel如何使用Gate和Policy进行授权?(权限控制)
如何在橙子建站中快速调整背景颜色?
如何挑选高效建站主机与优质域名?
Win11搜索不到蓝牙耳机怎么办 Win11蓝牙驱动更新修复【详解】
SQL查询语句优化的实用方法总结
Laravel如何使用模型观察者?(Observer代码示例)
Midjourney怎么调整光影效果_Midjourney光影调整方法【指南】
如何续费美橙建站之星域名及服务?
图册素材网站设计制作软件,图册的导出方式有几种?
php静态变量怎么调试_php静态变量作用域调试技巧【解答】
1688铺货到淘宝怎么操作 1688一键铺货到自己店铺详细步骤
如何用虚拟主机快速搭建网站?详细步骤解析
Laravel 419 page expired怎么解决_Laravel CSRF令牌过期处理
网站制作价目表怎么做,珍爱网婚介费用多少?
jQuery validate插件功能与用法详解
如何获取PHP WAP自助建站系统源码?
Swift开发中switch语句值绑定模式
Laravel如何连接多个数据库_Laravel多数据库连接配置与切换教程
Laravel模型关联查询教程_Laravel Eloquent一对多关联写法
如何使用 jQuery 正确渲染 Instagram 风格的标签列表
Microsoft Edge如何解决网页加载问题 Edge浏览器加载问题修复
如何基于云服务器快速搭建个人网站?
如何用好域名打造高点击率的自主建站?
如何在浏览器中启用Flash_2025年继续使用Flash Player的方法【过时】
再谈Python中的字符串与字符编码(推荐)
Laravel如何与Inertia.js和Vue/React构建现代单页应用
如何快速生成可下载的建站源码工具?
Laravel中DTO是什么概念_在Laravel项目中使用数据传输对象(DTO)
Claude怎样写结构化提示词_Claude结构化提示词写法【教程】
Laravel如何设置定时任务(Cron Job)_Laravel调度器与任务计划配置
如何用PHP工具快速搭建高效网站?
千问怎样用提示词获取健康建议_千问健康类提示词注意事项【指南】
头像制作网站在线观看,除了站酷,还有哪些比较好的设计网站?
手机怎么制作网站教程步骤,手机怎么做自己的网页链接?
如何在香港免费服务器上快速搭建网站?
简单实现Android文件上传
Python高阶函数应用_函数作为参数说明【指导】


n)