Laravel 项目在 Ubuntu 上的安全加固清单
一 基础部署与运行环境安全
- 保持系统与依赖为最新:及时更新 Ubuntu 与 Laravel、PHP 扩展,减少已知漏洞面。
- 安装必要扩展并确保 APP_KEY 已生成:如 BCMath、Ctype、Fileinfo、JSON、Mbstring、OpenSSL、PDO、Tokenizer、XML;执行 php artisan key:generate。
- 正确设置目录权限与属主:将 storage、bootstrap/cache 属主设为 www-data,权限 755/775 视目录而定,避免世界可写。
- 关闭调试与暴露路径:生产环境设置 APP_ENV=production、APP_DEBUG=false;Web 服务器仅暴露 public/ 目录,禁止访问 .env 与敏感文件(如 Nginx location ~ /.(?!well-known). { deny all; }*)。
- 强制 HTTPS:配置有效证书(如 Let’s Encrypt/Certbot),并在 .env 将 APP_URL 设为 HTTPS,同时设置安全响应头(如 X-Frame-Options、X-XSS-Protection、X-Content-Type-Options)。
二 应用层安全控制
- 启用并正确使用 CSRF 保护:所有表单与 AJAX 请求携带有效令牌;使用 VerifyCsrfToken 排除安全接口时需谨慎。
- 严格输入验证与输出转义:利用 FormRequest、验证规则与 Eloquent 防止 SQL 注入 与 XSS。
- 安全的会话与 Cookie:配置 HTTPS-only、SameSite、HttpOnly 等属性,设置合理会话 lifetime 与 regenerate 策略。
- 文件上传管控:限制 MIME 类型/扩展名/大小,存储于非 Web 可访问路径,必要时对文件内容做病毒扫描与重命名。
- 依赖与代码安全:定期执行 composer update,结合 Dependabot/Renovate 自动升级;移除开发依赖与调试组件(如 –no-dev 部署)。
三 服务器与网络防护
- 进程与权限隔离:以最小权限运行 PHP-FPM(如专用系统用户)、限制 sudo 使用;禁用不必要的 PHP 函数(如 exec、shell_exec、passthru 等)。
- 防火墙与端口最小化:仅开放 22/80/443 等必要端口,使用 UFW 或云安全组策略限制来源。
- 入侵防御:部署 Fail2ban 监控 SSH/MySQL/Laravel 登录,设置合理 maxretry、findtime、bantime 与白名单,降低暴力破解风险。
- 加密与密钥管理:数据库、缓存、队列等凭据集中管理,禁止硬编码;定期轮换密钥与证书。
四 日志监控与备份恢复
- 日志策略:启用 daily 或更高等级日志,集中采集 Laravel 日志、Nginx 访问/错误日志、PHP-FPM 日志;避免在生产显示错误详情。
- 监控与告警:结合 Nagios/Zabbix 或日志分析平台对异常流量、登录失败、响应时延等进行监控与告警。
- 备份与回滚:定期备份 代码、数据库、.env、存储 与 证书;在 Ubuntu 上使用脚本或 cron 定时执行,保留多份异地副本并定期演练恢复流程。
五 快速核查清单
| 检查项 |
期望状态/做法 |
| 系统与依赖 |
最新稳定版;无已知漏洞依赖 |
| APP_KEY |
已生成且唯一;不在代码库明文 |
| 调试与暴露 |
APP_DEBUG=false;仅暴露 public/;.env 不可访问 |
| HTTPS |
有效证书;全站强制跳转;安全头已配置 |
| 目录权限 |
storage、bootstrap/cache 属主 www-data;权限最小化 |
| 输入与会话 |
CSRF、验证、输出转义;会话 Cookie 安全属性 |
| 上传与依赖 |
上传白名单与隔离存储;composer --no-dev 部署 |
| 防火墙与端口 |
仅开放 22/80/443;来源限制 |
| Fail2ban |
SSH/MySQL/Laravel 监狱启用并调优 |
| 日志与备份 |
集中日志、监控告警;定时备份与可回滚 |
以上要点覆盖了 Laravel 在 Ubuntu 上的关键安全面,从部署、应用、服务器到运维的全链路防护,可作为上线前与日常巡检的实用清单。