Ubuntu 服务器上部署与加固 Laravel 的实用清单
一 系统与服务基线加固
- 保持系统与软件为最新:定期执行 apt update && apt upgrade,并及时更新 PHP、Nginx/Apache、Laravel 及其依赖,修复已知漏洞。
- 最小化暴露面:关闭未使用的服务(如 FTP、Telnet),仅开放必要端口。
- 防火墙策略:使用 ufw 仅放行 HTTP(80)/HTTPS(443)/SSH(22);如需进一步降低噪声,可修改 SSH 端口并禁用 root 远程登录、强制 SSH 密钥认证。
- 数据库安全:执行 mysql_secure_installation,创建最小权限数据库用户,避免使用 root 直连应用。
- PHP 运行环境:安装并启用常见扩展(如 php-cli php-fpm php-mysql php-mbstring php-xml php-curl php-zip php-gd php-bcmath),确保与 Laravel 版本兼容。
二 Web 服务器与传输安全
- 站点根目录必须指向 /public,禁止直接暴露应用根目录。
- 启用 HTTPS:使用 Certbot 申请 Let’s Encrypt 证书并配置自动续期(如执行 certbot renew --dry-run 验证续期)。
- 强制 HTTPS:在 .env 设置 APP_URL=https://yourdomain.com,并通过中间件或服务器配置将 HTTP→HTTPS 重定向。
- 安全响应头:统一添加 X-Frame-Options: DENY、X-XSS-Protection: 1; mode=block、X-Content-Type-Options: nosniff;按需配置 Strict-Transport-Security。
- 禁止访问敏感与私有目录:在 Nginx/Apache 中屏蔽 .env、vendor、node_modules 等路径的直接访问。
- Nginx 关键配置要点(示例):root 指向 /var/www/laravel/public;try_files 回退到 index.php;PHP 通过 php-fpm.sock 处理;对点文件与敏感目录返回 403。
三 Laravel 应用层安全配置
- 关闭调试与信息泄露:生产环境设置 APP_ENV=production、APP_DEBUG=false。
- 应用密钥:确保 APP_KEY 唯一且保密(使用 php artisan key:generate 生成)。
- CSRF 防护:默认启用 VerifyCsrfToken;所有表单使用 @csrf,AJAX 在请求头携带 X-CSRF-TOKEN(可从页面 meta 标签读取)。
- 输入验证与输出转义:使用 Request 验证规则与 Eloquent ORM 防止 SQL 注入;Blade 输出默认转义,避免 XSS。
- 会话安全:在 config/session.php 启用 ‘encrypt’ => true、设置合理 ‘lifetime’,生产环境开启 ‘secure’ => true(仅 HTTPS)。
- 密码存储:使用 Hash::make / Hash::check,严禁明文保存。
- 速率限制:在路由或控制器使用 throttle 中间件(如 Route::middleware([‘throttle:60,1’]))缓解暴力破解与滥用。
- 内容安全策略(CSP):通过自定义中间件设置 Content-Security-Policy 头,限制脚本与资源来源,进一步抑制 XSS。
四 文件权限与目录保护
- 目录所有权:将项目所有者设为 Web 服务用户(如 www-data),如:
- chown -R www-data:www-data /var/www/laravel
- 可写目录:确保 storage、bootstrap/cache 可写(如 chmod -R 775),其他目录尽量只读。
- 敏感文件:限制 .env 访问权限(如 chmod 600 .env),并在服务器层面对其禁止访问。
- 上传安全:限制上传类型/大小,存储于私有目录,通过 storage:link 仅公开必要资源,避免执行上传文件。
五 依赖漏洞管理、运行与运维安全
- 依赖安全扫描:集成 enlightn/security-checker(如 composer require --dev enlightn/security-checker),定期执行 php artisan security:check;结合 OWASP ZAP/Burp Suite 做渗透测试。
- 自动化更新:在 GitHub Actions/GitLab CI 配置依赖更新与安全审计流水线,及时应用补丁。
- 生产依赖与缓存:部署时执行 composer install --no-dev --optimize-autoloader;按需运行 config:cache、route:cache、view:cache 提升性能。
- 队列与调度:使用 Supervisor 守护 queue:work,在 Crontab 中每分钟执行 php artisan schedule:run,确保任务可靠运行。
- 日志与监控:将日志写入 storage/logs 并妥善保护;使用 Prometheus+Grafana、ELK 等监控异常(如频繁登录失败、异常 404/500)。
- 备份与回滚:定期备份 代码与数据库,保留历史版本与回滚方案,发生入侵或故障时可快速恢复。