Laravel 项目在 CentOS 的安全防护清单
一 系统与网络防护
- 保持系统与软件包为最新,及时修补漏洞;仅启用必要的服务与端口,减少攻击面。
- 使用 firewalld(CentOS 7/8 默认)进行端口管控,遵循最小权限原则:
- 启动并持久化:
- systemctl start firewalld && systemctl enable firewalld
- 开放 Web 与 SSH:
- firewall-cmd --zone=public --add-port=80/tcp --permanent
- firewall-cmd --zone=public --add-port=443/tcp --permanent
- firewall-cmd --zone=public --add-port=22/tcp --permanent
- firewall-cmd --reload
- 如需数据库仅内网访问,不建议对公网开放 3306,或在云上通过安全组限制来源 IP。
- 加固 SSH:禁用密码登录,使用 SSH 密钥;可结合 fail2ban 防止暴力破解。
- 云上环境注意“双重防护”:同时正确配置 安全组 与操作系统防火墙,避免误开放端口。
二 Web 服务器与 PHP 安全
- 通过 Nginx/Apache 仅暴露 public/ 目录,禁止访问敏感路径与隐藏文件:
- Nginx 示例:
- root /var/www/laravel/public;
- try_files $uri $uri/ /index.php?$query_string;
- 对上传目录禁用脚本执行:location /storage { location ~ .php$ { deny all; } }
- 隐藏敏感文件:location ~ /.(?!well-known).* { deny all; }
- 启用 HTTPS/TLS(如 Let’s Encrypt),并配置 HTTP→HTTPS 重定向 与 HSTS。
- 配置安全的 HTTP 响应头(可借助框架或中间件):
- X-Frame-Options: SAMEORIGIN
- X-XSS-Protection: 1; mode=block
- X-Content-Type-Options: nosniff
- Content-Security-Policy: 按站点策略收紧资源来源
- PHP 生产参数建议:
- display_errors = Off,log_errors = On,error_log 指向受限日志文件
- 限制危险函数:disable_functions = exec,passthru,shell_exec,system,proc_open,popen,eval
- 上传控制:upload_max_filesize 与 post_max_size 设为业务所需的最小值,启用上传目录隔离与后缀白名单校验
三 Laravel 应用层安全
- 环境与密钥:
- 将 .env 加入 .gitignore,禁止提交;生产环境设置 APP_ENV=production、APP_DEBUG=false
- 生成应用密钥:php artisan key:generate --force
- 依赖与漏洞扫描:
- 定期执行 composer update,移除无用依赖
- 集成安全扫描:如 enlightn/security-checker 或 roave/security-advisories
- 输入与防护机制:
- 使用 Eloquent/查询构造器 防止 SQL 注入;对所有输入进行验证与清理
- 启用并正确使用 CSRF、XSS 防护、表单请求验证、强哈希(bcrypt)
- 会话与认证:
- 启用安全会话配置(如仅 HTTPS 传输、HttpOnly、SameSite 等)
- 实现登录限流与锁定策略,防止暴力破解
- 权限与访问控制:
- 基于 Gate/Policy 实现细粒度授权,遵循最小权限原则
四 文件权限与 SELinux
- Web 服务运行用户与目录属主保持一致(常见为 apache:apache 或 nginx:nginx):
- chown -R apache:apache storage bootstrap/cache
- find storage bootstrap/cache -type f -exec chmod 644 {} ;
- find storage bootstrap/cache -type d -exec chmod 755 {} ;
- 禁止 Web 访问敏感文件:.env、.git、storage/*.key 等;Nginx 配置中加入对隐藏文件的 deny all。
- SELinux:
- 建议保持 SELinux Enforcing,并通过 semanage/fcontext 为 Web 目录设置正确的类型(如 httpd_sys_content_t、httpd_sys_rw_content_t),避免直接关闭 SELinux(如 SELINUX=disabled),以降低系统整体风险。
五 数据库、备份与监控审计
- 数据库安全:
- 使用强密码与最小权限账户,避免使用 root 远程连接;仅在内网开放 3306(如必须)
- 执行 mysql_secure_installation,清理匿名用户与测试库
- 备份与恢复:
- 定期备份代码、.env、数据库与存储(含队列、缓存快照);异地/多副本保存,定期演练恢复流程
- 日志与监控:
- 启用并轮转 Laravel 与 Web/PHP 日志,集中到安全信息与审计平台
- 部署 fail2ban 监控 SSH/面板等暴力登录;结合应用性能与安全监控(如异常登录、异常请求、队列堆积告警)