centos laravel安全设置有哪些
小樊
45
2025-11-29 17:17:59
CentOS 上 Laravel 安全设置清单
一 系统与网络加固
- 保持系统与软件包为最新,及时修补漏洞;启用并配置 firewalld/iptables,仅开放必要端口(如 22/80/443),对管理口可限制来源 IP。
- 部署 HTTPS/TLS(如 Let’s Encrypt),在 .env 设置 APP_URL=https://… 并在 Web 服务器或中间件中强制跳转。
- 安装并启用 Fail2ban,对 SSH、MySQL、Laravel 登录 进行暴力破解防护:
- SSH 建议:maxretry=3、findtime=10m、bantime=24h;日志路径 CentOS 为 /var/log/secure。
- Laravel 示例:创建过滤器规则匹配登录失败日志,jail 配置 maxretry=5、findtime=1h、bantime=12h,日志路径为 /var/www/your-app/storage/logs/laravel.log。
- 数据库安全:使用强口令、限制数据库账号仅本地访问、最小权限;在 MariaDB 上执行安全初始化(mysql_secure_installation)。
二 Web 服务器与 PHP 安全
- Nginx 安全头与隐藏文件:
- 添加 X-Frame-Options: SAMEORIGIN、X-XSS-Protection: 1; mode=block、X-Content-Type-Options: nosniff。
- 禁止访问敏感与隐藏文件:location ~ /.(?!well-known).* { deny all; }。
- Apache 安全:启用 mod_rewrite、mod_headers,合理配置虚拟主机,使用 .htaccess 时设置 AllowOverride All。
- PHP 配置(php.ini):关闭错误显示 display_errors=Off、开启错误日志 log_errors=On,禁用危险函数(如 exec、system),设置合理 memory_limit、max_execution_time。
三 Laravel 应用层安全配置
- 关键配置(示例值与说明):
- APP_KEY:确保为 32 位随机字符串(php artisan key:generate)。
- APP_DEBUG=false(生产环境)。
- 会话 Cookie:SESSION_SECURE_COOKIE=true、SESSION_HTTP_ONLY=true、SESSION_SAME_SITE=lax/strict。
- 密码哈希:BCRYPT_ROUNDS=12。
- 防护机制:
- 启用并正确使用 CSRF(表单加 @csrf,AJAX 设置 X-CSRF-TOKEN 头)。
- 严格 输入验证 与 授权(Form Request、Gate/Policy),避免业务逻辑绕过。
- 防注入:优先使用 Eloquent/查询构造器,避免原始 SQL。
- 文件上传:限制类型/大小,存储于非 Web 可访问目录,必要时做病毒扫描与重命名。
- 速率限制:登录/敏感接口使用 throttle 中间件(如 throttle:60,1)。
- 安全头与 CSP:启用 Content-Security-Policy 等浏览器安全头,必要时集成 laravel-csp。
四 文件权限与 SELinux
- 目录归属与权限(以 Apache 运行用户 apache:apache 为例):
- 确保可写目录归属正确并限制权限:
- chown -R apache:apache storage bootstrap/cache
- chmod -R 775 storage bootstrap/cache
- 如启用 SELinux:
- 设置目录类型:chcon -R -t httpd_sys_content_t /path/to/laravel
- 可写目录:chcon -R -t httpd_sys_rw_content_t storage bootstrap/cache
- 数据库远程连接(如需要):setsebool httpd_can_network_connect_db 1
- 生产环境建议运行 php artisan config:cache 提升性能(注意仅在生产环境缓存配置)。
五 依赖、日志与备份监控
- 依赖管理:定期执行 composer audit、composer outdated,移除无用依赖;可使用 Dependabot/Renovate 自动创建安全更新 PR。
- 日志与监控:
- 生产环境使用 daily 日志通道(LOG_CHANNEL=daily),确保登录失败、权限变更、敏感操作等关键事件被记录。
- 结合 Fail2ban 与监控系统(如 Nagios/Zabbix)进行异常检测与告警。
- 备份与恢复:定期备份代码、附件与数据库,验证可恢复性,保留多份异地副本。