Laravel Security 是一套针对 Laravel 应用的安全最佳实践指南,目标是帮助开发者防范常见漏洞。资料以代码示例和配置片段的形式,覆盖从生产配置到认证、授权、数据访问、前端输出与部署的多个层面。
一、用途与适用场景 该指南适用于以下情形:搭建 Laravel 认证与授权(Sanctum、Passport、Jetstream、Breeze);实现用户角色、权限与策略(Policy);配置生产环境安全设置与环境变量;审查 Laravel 应用的安全漏洞;将 Laravel 应用部署到生产环境;编写安全的 Eloquent 查询与迁移。
二、生产配置 指南强调生产环境的关键设置:APP_ENV 设为 production,APP_DEBUG 必须为 false,APP_KEY 必须通过 php artisan key:generate 生成,并可在启动时校验其是否为空。会话配置建议 secure 为 true、http_only 为 true、same_site 为 lax。环境文件方面,.env 不应提交到版本控制,应使用 .env.example 占位,并可在启动时校验必需配置项。HTTPS 强制方面,生产环境可调用 URL::forceScheme('https'),配置可信代理时使用具体 IP 段而非通配符,并可通过中间件强制跳转 HTTPS。
三、认证 Sanctum 部分给出 stateful 域名、令牌过期时间、令牌前缀等配置,以及通过 createToken 指定 abilities、在路由上用 abilities 中间件校验权限的做法。密码安全部分介绍 bcrypt 与 Argon2id 的配置参数,以及使用 Password 规则链(最小长度、大小写、数字、符号、uncompromised 检查)进行校验,并提及登录尝试限流与可疑登录通知。会话管理部分建议使用 database 或 redis 驱动,登录时调用 session()->regenerate() 防止会话固定,登出时 invalidate 并 regenerateToken。
四、授权 指南介绍 Gate 的定义方式,包括基于用户与模型的条件判断,以及用 before() 实现超级管理员覆盖。Policy 部分给出 viewAny、view、create、update、delete、restore、forceDelete 等方法的示例,并说明在 AuthServiceProvider 注册、在控制器中 authorize、在 Blade 中用 @can/@cannot 使用。还介绍通过路由中间件 can: 以及自定义角色中间件进行授权。
五、Eloquent 安全 批量赋值保护方面,强调不要使用 $guarded = [],应使用 $fillable 白名单,并避免将 role、is_admin 等敏感字段加入;创建数据时使用 validated() 或 safe()->only(),而非 $request->all()。SQL 注入防护方面,说明 Eloquent 与 Query Builder 会自动参数化,应避免字符串插值、whereRaw/orderByRaw/groupByRaw 拼接未转义输入以及 DB::statement 拼接。属性转换部分给出 datetime、boolean、array、encrypted:array、hashed 等 cast 示例。模型安全部分建议用 $hidden 隐藏密码、remember_token、双因素密钥等敏感字段,并谨慎使用 $appends。
六、CSRF 与 XSS CSRF 默认由 VerifyCsrfToken 中间件启用,表单需加 @csrf;排除路由应谨慎,仅对具备自身签名校验的 webhook 等排除。JavaScript 场景可通过 meta 标签与请求头传递令牌。XSS 防护方面,Blade 的 {{ }} 会自动转义,{!! !!} 为原始输出,绝不可用于用户输入;需要允许部分 HTML 时应使用白名单净化(如 HTMLPurifier);JavaScript 上下文应使用 @js 或 @json。指南还给出安全响应头中间件示例,设置 X-Content-Type-Options、X-Frame-Options、X-XSS-Protection、Referrer-Policy 与 Content-Security-Policy。
七、输入验证 通过 Form Request 的 authorize 与 rules 进行校验,示例包含标题、内容、图片类型与大小白名单、标签数组及存在性校验,并给出自定义错误消息与验证后净化的做法。
八、限制与未提供信息 资料未说明该技能的安装方式、运行命令、收费模式、价格、平台支持范围或实际效果,这些内容暂未提供。