Ubuntu上保障 Laravel 安全性的系统化清单
一 系统与服务器加固
- 保持更新:及时升级 Ubuntu、PHP、Laravel 与所有依赖,第一时间应用安全补丁。
- 最小权限与运行用户:Web 服务以 www-data 运行,仅对 storage、bootstrap/cache 赋予写权限,其他目录与 PHP 文件设为只读,避免代码被篡改。
- 防火墙与端口:使用 UFW/firewalld 仅开放 22/80/443,对管理口可限制来源 IP。
- Web 服务器安全头与重写:
- Nginx 添加:X-Frame-Options DENY、X-XSS-Protection 1; mode=block、X-Content-Type-Options nosniff、Strict-Transport-Security “max-age=63072000; includeSubDomains”;用 try_files $uri $uri/ /index.php?$query_string; 避免目录遍历。
- Apache 启用 mod_rewrite、mod_headers 并配置安全头。
- 禁用暴露信息:在 php.ini 中关闭 expose_php,并通过 disable_functions 禁用危险函数(如 exec、shell_exec 等,按业务最小化启用)。
- 可选 WAF:在边缘或主机层引入 WAF(如 ModSecurity)抵御常见 Web 攻击。
二 Laravel 应用配置安全
- 环境与密钥:生产环境设置 APP_ENV=production、APP_DEBUG=false;使用 php artisan key:generate 生成唯一 APP_KEY;APP_URL=https://域名;严禁将 .env 提交至版本控制。
- 安全头与 HTTPS:在 Nginx/Apache 配置或中间件中统一下发安全头;全站强制 HTTPS(可用 Certbot 自动签发与续期)。
- 会话 Cookie:在 config/session.php 启用 secure=true(仅 HTTPS 传输)、http_only=true、same_site=strict|lax,并优先使用 redis/database 会话驱动。
- 内置防护启用:保持 CSRF 默认开启,所有表单包含 @csrf;对所有输入使用 Validator 严格校验;使用 Eloquent/查询构造器 避免原始 SQL;输出在 Blade 中默认转义以缓解 XSS。
- 认证与授权:用内置 auth 中间件保护路由,必要时指定 守卫(如 auth:admin);对登录与敏感操作启用 ThrottleRequests 限流;对“修改密码、支付、删除”等敏感路由使用 password.confirm 中间件要求近期密码确认。
三 依赖与部署流程
- 依赖管理:定期执行 composer update 与安全审计;集成 enlightn/security-checker 检测已知漏洞;使用 Dependabot/Renovate 自动创建安全升级 PR。
- 构建与优化:生产执行 composer install --no-dev;按需运行 config:cache、route:cache、view:cache 提升性能并减少运行时读取 .env 的次数。
- 安全部署:优先 Git + CI/CD 或 零停机部署(如先部署到新目录,再原子切换软链接),避免 FTP;保留快速回滚能力。
- 目录与权限:部署后确保 storage、bootstrap/cache 归属 www-data 且权限为 775,其余目录与文件更严格;禁止 Web 直接访问 .env 与敏感目录(Nginx 配置 deny all)。
四 运行时与运维安全
- 日志与监控:启用 Laravel 日志 并集中到 ELK/Loki 等系统;结合 Nagios/Zabbix 监控异常流量、登录失败激增、队列堆积等;定期审计日志。
- 队列与计划任务:用 Supervisor 管理 queue:work 常驻进程;通过系统 Cron 执行 schedule:run 调度任务,避免 Web 触发长时任务。
- 缓存与会话:生产优先 Redis/Memcached 作为缓存与会话存储,提升隔离性与可靠性。
- 备份与演练:定期备份 代码、数据库、附件与配置,并进行恢复演练;保留多份异地副本与清晰回滚流程。
五 关键配置与命令速查表
| 维度 |
推荐配置 |
关键命令或位置 |
| 环境与密钥 |
APP_ENV=production、APP_DEBUG=false、APP_URL=https://… |
.env;php artisan key:generate |
| HTTPS |
全站 301 跳转;HSTS 强申明 |
Nginx: return 301 https://$host$request_uri; add_header Strict-Transport-Security “max-age=63072000; includeSubDomains”; |
| 安全头 |
X-Frame-Options、X-XSS-Protection、X-Content-Type-Options |
Nginx: add_header X-Frame-Options DENY; X-XSS-Protection “1; mode=block”; X-Content-Type-Options nosniff; |
| 文件权限 |
storage、bootstrap/cache 可写;其余只读 |
chown -R www-data:www-data /var/www/html/project; chmod -R 775 storage bootstrap/cache |
| 会话 Cookie |
secure、http_only、same_site、驱动用 redis/database |
config/session.php |
| 限流与防护 |
登录节流、CSRF、输入验证、Eloquent |
路由中间件 throttle:6,1;@csrf;Validator;Eloquent/查询构造器 |
| 依赖与审计 |
无 dev 依赖、定期更新、漏洞扫描 |
composer install --no-dev;composer update;enlightn/security-checker |
| 部署与优化 |
Git/CI、零停机、缓存配置 |
git pull/CI 脚本;php artisan config:cache route:cache view:cache |
| 队列与计划任务 |
Supervisor 管队列;Cron 跑调度 |
supervisord.conf;* * * * * cd /var/www/project && php artisan schedule:run >> /dev/null 2>&1 |
| 日志与监控 |
集中日志、主机与应用监控 |
Laravel Log → ELK/Loki;Nagios/Zabbix 告警规则 |