Ubuntu环境下Laravel安全加固指南
mod_rewrite(sudo a2enmod rewrite)和mod_headers模块,配置虚拟主机时设置AllowOverride All以支持Laravel路由,并通过add_header指令添加安全响应头(如X-Frame-Options SAMEORIGIN、X-XSS-Protection "1; mode=block")。/var/www/laravel/public,添加try_files $uri $uri/ /index.php?$query_string以支持路由,并通过add_header添加相同安全头;同时禁止访问隐藏文件(location ~ /\.(?!well-known).* { deny all; })。php.ini,设置display_errors = Off(避免敏感信息泄露)、error_reporting = E_ALL(记录所有错误到日志)、safe_mode = On(启用安全模式);确保文件权限符合最小化原则(见下文)。.env文件中,设置APP_ENV=production(启用生产模式)、APP_DEBUG=false(关闭调试信息,防止堆栈泄露);使用php artisan key:generate生成唯一的APP_KEY(用于加密会话、密码重置令牌等);确保.env文件权限为600(仅所有者可读写)。@csrf指令(如<form method="POST" action="/submit">@csrf</form>);对于API路由,可使用VerifyCsrfToken中间件的except属性排除无需CSRF的接口(如支付回调)。validate方法对所有用户输入进行严格校验,如:$request->validate([
'name' => 'required|string|max:255',
'email' => 'required|email|unique:users,email',
'password' => 'required|min:8|confirmed',
]);
避免直接使用$_GET/$_POST获取用户输入,防止SQL注入、XSS攻击。.env中设置SESSION_DRIVER=redis(提升会话性能与安全性),并配置SESSION_COOKIE_SECURE=true(仅通过HTTPS传输会话cookie)、SESSION_COOKIE_HTTPONLY=true(禁止JavaScript访问cookie)、SESSION_LIFETIME=120(合理设置会话过期时间);使用Laravel内置的bcrypt哈希算法存储用户密码(Hash::make($password))。app/Http/Kernel.php中配置ThrottleRequests中间件,限制用户请求频率,如:protected $middlewareGroups = [
'web' => [..., \Illuminate\Routing\Middleware\ThrottleRequests::class.':60,1'], // 60次/分钟
'api' => ['throttle:60,1'], // API接口限制
];
防止暴力破解(如登录接口)和DDoS攻击。post.create、post.edit权限,无需user.manage权限;避免分配*(所有权限)给普通用户。super_admin):拥有所有权限(*),用于系统维护;system_admin):管理用户与角色,但无业务数据权限;dept_admin):管理本部门数据与用户;user):仅拥有自身业务操作权限(如post.view、post.create)。config/permission.php中配置Redis缓存权限,设置expiration_time为24小时('expiration_time' => DateInterval::createFromDateString('24 hours')),减少数据库查询次数;定期调用app(PermissionRegistrar::class)->forgetCachedPermissions()清除缓存(如权限变更后)。.env中设置APP_URL=https://yourdomain.com,配置Web服务器强制跳转HTTPS(如Nginx的return 301 https://$host$request_uri;);使用Let’s Encrypt免费获取SSL证书(sudo apt install certbot python3-certbot-nginx,sudo certbot --nginx),确保证书有效期(90天)内自动续期。composer update laravel/framework)、PHP版本(sudo apt update && sudo apt upgrade php)、Composer依赖(composer update)及Ubuntu系统(sudo apt update && sudo apt upgrade),修补已知安全漏洞。composer-audit工具扫描依赖包中的安全漏洞(composer require --dev composer/composer,composer audit),及时修复高危漏洞。error('level' => 'error'),将日志存储到集中式系统(如ELK Stack、Grafana Loki);监听权限变更事件(如RoleAttached、PermissionAttached),记录操作日志(如Log::channel('security')->info('权限变更事件', [...])),便于追踪异常操作。www-data)对storage、bootstrap/cache目录有写入权限(sudo chown -R www-data:www-data storage bootstrap/cache,sudo chmod -R 755 storage bootstrap/cache);app、config、public)设置为只读(sudo chmod -R 755 app config public);.env、vendor目录权限为600(sudo chmod 600 .env vendor),防止未授权修改。