Linux如何保障Laravel项目安全
小樊
40
2025-12-26 04:38:48
Linux上保障Laravel项目安全的实操清单
一 系统与基础防护
- 保持系统与软件为最新:及时更新 Linux 发行版、PHP、Nginx/Apache、数据库、Composer,第一时间获取安全修复。
- 最小化暴露面:仅开放必要端口(如 80/443),使用 firewalld/ufw 白名单管理来源;移除或禁用不必要的 PHP 模块/扩展 与 Web 服务器模块。
- 强化 PHP 运行时:在 php.ini 中关闭错误显示(仅记录日志)、限制危险函数(如 exec、shell_exec、passthru、proc_open 等)、开启 open_basedir 限制脚本访问范围。
- 安全基线:为 SSH 启用密钥登录、禁用 root 直连、更改默认端口、使用 fail2ban 防御暴力破解。
二 权限与文件安全
- 运行身份与所有权:将站点目录属主设为 Web 服务用户(如 www-data),确保应用可写目录可被 PHP-FPM 写入,同时避免其他系统账号越权访问。
- 推荐权限基线(示例):
- 目录:755(项目根)、775(storage、bootstrap/cache 及其子目录)
- 文件:644
- .env:600
- 隐藏文件与敏感路径:禁止 Web 访问 .env、.git 等(Nginx 配置中
location ~ /\.(?!well-known).* { deny all; })
- 协同开发场景:将部署用户加入 www-data 组,便于 SFTP 编辑同时不破坏安全边界。
三 Web 服务器与传输安全
- 强制 HTTPS:使用 Let’s Encrypt + Certbot 自动签发与续期,配置 HTTP→HTTPS 301 跳转,Nginx 中正确设置
ssl_certificate 与 ssl_certificate_key,并优化 TLS 1.2/1.3 与加密套件。
- 安全响应头:启用 X-Frame-Options、X-XSS-Protection、X-Content-Type-Options、Content-Security-Policy(CSP) 等,降低点击劫持、XSS、MIME 嗅探等风险。
- 入口与解析安全:Nginx 仅将请求导向 public/index.php,隐藏框架内部结构;关闭目录列表;必要时为静态资源设置长缓存与完整性校验。
四 Laravel 应用层安全
- 基础配置:生产环境务必设置 APP_ENV=production、APP_DEBUG=false;使用
php artisan key:generate 生成应用密钥;.env 不纳入版本控制 且权限为 600。
- 内置防护:启用并保持 CSRF 保护;对所有输入进行 验证与清理;使用 Eloquent/查询构造器 防止 SQL 注入;Blade 默认 HTML 转义 降低 XSS;使用 Bcrypt 哈希存储密码;通过 Gate/Policy 实施细粒度授权。
- 上传与内容安全:严格限制上传 类型/大小,存储于不可执行目录,必要时对文件内容做扫描与重命名;启用 请求频率限制 抵御暴力与滥用。
五 依赖、备份与监控审计
- 依赖与漏洞治理:定期执行 composer update,移除无用依赖;使用 Dependabot/Renovate 自动升级;结合 Snyk 等工具扫描第三方漏洞。
- 数据库安全:使用 强口令 与 最小权限 账户;限制来源主机;为备份与复制链路单独创建受限账号。
- 日志与监控:开启 Laravel 日志 与服务器审计日志(如 auditd);集中收集与告警(如 ELK/Wazuh/Zabbix);定期演练恢复流程。
- 备份与应急:制定 每日增量 + 每周全量 备份策略,异地/离线保存;保留 ≥30 天;定期验证可恢复性;发生入侵时优先下线、取证、修补与轮换密钥/证书。