laravel 11 安全能力整体强于 laravel 9 和 10,因底层机制更早介入、默认更严格、绕过路径更少:中间件注册不可跳过,csrf/session 策略更主动,认证授权默认加固,错误处理与日志更防泄露。

Laravel 11 的安全防护能力整体强于 Laravel 9 和 10,不是因为“加了更多开关”,而是底层安全机制更早介入、默认更严格、绕过路径更少。
中间件注册机制升级:安全链路从“可配置”变成“不可跳过”
Laravel 9 开始将中间件注册逻辑从 app/Http/Kernel.php 迁移至 bootstrap/app.php 中的 withMiddleware() 闭包。到了 Laravel 11,这一机制进一步收紧:
- 所有核心中间件(如
TrustProxies、TrimStrings、ConvertEmptyStringsToNull)必须显式调用$middleware->web()或$middleware->api()注册 - 不再支持在
Kernel.php中通过数组追加,旧写法直接被忽略且无报错 - 框架启动时会校验中间件是否已注入,缺失关键项(如 CSRF 验证中间件)会导致路由拒绝响应,而非静默放行
CSRF 和 Session 安全策略更主动
- Laravel 9 默认启用
SameSite=Lax,但允许手动降级为None;Laravel 11 强制SameSite=Strict(web 路由)或Lax(API 路由),且禁用None除非显式配置SECURE环境与 HTTPS -
SESSION_DOMAIN已完全移除,改由sanctum.php中的stateful白名单控制可信域名,避免子域泛匹配导致的跨站会话劫持 - Laravel 11 新增
VerifyCsrfToken::shouldRotateToken()钩子,默认在用户登录、权限变更后强制刷新 token,防范 token 劫持重放
认证与授权层默认加固
- Laravel 9 的
Auth::attempt()仍接受明文密码字段(需手动哈希),Laravel 11 在LoginRequest验证规则中内置password_hashed规则,未哈希即拒入 -
can()方法在 Laravel 11 中默认开启策略缓存,并自动绑定模型事件(如retrieved、updated)触发权限重载,防止缓存 stale 导致越权访问 - Jetstream 团队功能(teams)在 Laravel 9 中仅靠
'teams' => true控制,Laravel 11 要求同时启用features.teams.scopes和sanctum.token_scopes,否则团队上下文隔离失效
错误处理与信息泄露控制更彻底
- Laravel 9 的
APP_DEBUG=true仍可能暴露部分环境变量键名;Laravel 11 在异常渲染阶段剥离所有以DB_、REDIS_、CACHE_、SANCTUM_开头的变量值,即使调试开启也不泄漏凭证片段 - 日志通道默认禁用
stack中的single驱动回写到storage/logs/laravel.log,改为只投递到stderr或远程服务(如 Sentry),降低日志文件被 Web 直接访问的风险
不复杂但容易忽略。











