CentOS 上提升 Laravel 安全性的可执行清单
一 系统与网络加固
- 保持系统与软件包更新:定期执行 yum update -y,及时修补 CentOS、PHP、Nginx/Apache、Laravel 等组件漏洞。
- 配置防火墙:使用 firewalld 仅开放必要端口(如 22/80/443),示例:
firewall-cmd --permanent --add-service=http --add-service=https && firewall-cmd --reload。
- 强化 SSH:禁用 root 登录、使用 SSH 密钥、可修改默认端口,并限制可登录用户/来源网段。
- 启用 SELinux:保持 SELINUX=enforcing,必要时使用
setsebool 与策略模块精细化控制服务行为。
- 服务最小化:仅安装与运行必要服务,关闭未使用的端口与进程。
二 Web 服务器与 PHP 安全
- 强制 HTTPS:部署 Let’s Encrypt 证书并配置自动续期,Nginx 设置
return 301 https://$host$request_uri;。
- 安全响应头:启用 Strict-Transport-Security、X-Frame-Options、X-Content-Type-Options、X-XSS-Protection、Content-Security-Policy;可使用 spatie/laravel-security-headers 快速配置。
- PHP 安全:在 php.ini 中关闭危险函数(如
disable_functions=exec,shell_exec,system,passthru,proc_open,popen)、限制上传大小、开启错误日志但不暴露到 Web、使用非 root 运行 PHP-FPM。
- Web 服务器配置:隐藏版本信息(
server_tokens off;)、限制请求方法、设置合适的 client_max_body_size、为上传目录禁用脚本执行(Nginx location /uploads { location ~ \.php$ { deny all; } })。
三 Laravel 应用层防护
- 保持框架与依赖更新:定期执行 composer update,移除无用依赖;使用 Dependabot/Snyk 或 enlightn/security-checker 扫描已知漏洞。
- 启用内置防护:使用 CSRF(表单加
@csrf)、Eloquent/查询构造器防 SQL 注入、Blade 自动转义防 XSS、内置 Hash 存储密码。
- 输入验证与输出转义:对所有用户输入进行验证与清理,输出使用 Blade 的
{{ }} 自动转义。
- 会话安全:在 config/session.php 启用
secure=true、http_only=true,登录成功后调用 regenerate() 重置会话 ID,设置合理 lifetime。
- 速率限制:对登录、注册、API 等接口使用
throttle 中间件(如 throttle:60,1)抵御暴力与滥用。
- 内容安全策略(CSP):通过策略限制脚本/样式来源,显著降低 XSS 风险。
- 文件上传:限制 类型/大小,存储到非 Web 可访问目录,必要时对文件进行病毒扫描与重命名。
- 安全头与中间件:在 app/Http/Kernel.php 注册
TrustHosts、PreventRequestsDuringMaintenance 等基础中间件。
四 数据与备份
- 数据库安全:使用强口令、限制数据库账户仅授予最小权限、禁止远程 root 登录、仅监听内网、定期更换密码。
- 环境变量与敏感信息:将 .env 加入 .gitignore,禁止提交到版本控制;密钥、API Key 等仅存于环境变量。
- 备份与恢复:定期备份代码与数据库(含结构与数据),保留多份异地副本,定期演练恢复流程。
五 监控审计与持续加固
- 日志与告警:开启 Laravel 日志 与 PHP-FPM/Syslog,集中收集并监控异常(如多次登录失败、异常请求路径、上传异常)。
- 安全审计与测试:定期进行 代码审查、依赖漏洞扫描与渗透测试,及时修复问题。
- 部署与维护:变更通过 CI/CD 自动执行安全基线检查与测试,上线前进行安全检查清单核验。