Laravel 安全最佳实践
针对 Laravel 应用程序的全面安全指导,以防范常见漏洞。
何时启用
- 添加身份验证或授权时
- 处理用户输入和文件上传时
- 构建新的 API 端点时
- 管理密钥和环境设置时
- 强化生产环境部署时
工作原理
- 中间件提供基础保护(通过
VerifyCsrfToken实现 CSRF,通过SecurityHeaders实现安全标头)。 - 守卫和策略强制执行访问控制(
auth:sanctum、$this->authorize、策略中间件)。 - 表单请求在输入到达服务之前进行验证和整形(
UploadInvoiceRequest)。 - 速率限制在身份验证控制之外增加滥用保护(
RateLimiter::for('login'))。 - 数据安全来自加密转换、批量赋值保护以及签名路由(
URL::temporarySignedRoute+signed中间件)。
核心安全设置
- 生产环境中设置
APP_DEBUG=false APP_KEY必须设置,并在泄露时轮换- 设置
SESSION_SECURE_COOKIE=true和SESSION_SAME_SITE=lax(对于敏感应用,使用strict) - 配置受信任的代理以正确检测 HTTPS
会话和 Cookie 强化
- 设置
SESSION_HTTP_ONLY=true以防止 JavaScript 访问 - 对高风险流程使用
SESSION_SAME_SITE=strict - 在登录和权限变更时重新生成会话
身份验证与令牌
- 使用 Laravel Sanctum 或 Passport 进行 API 身份验证
- 对于敏感数据,优先使用带有刷新流程的短期令牌
- 在注销和账户泄露时撤销令牌
路由保护示例:
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Route;
Route::middleware('auth:sanctum')->get('/me', function (Request $request) {
return $request->user();
});
密码安全
- 使用
Hash::make()哈希密码,切勿存储明文 - 使用 Laravel 的密码代理进行重置流程
use Illuminate\Support\Facades\Hash;
use Illuminate\Validation\Rules\Password;
$validated = $request…