Linux系统中ThinkPHP的安全配置
小樊
32
2025-12-26 04:52:45
Linux系统下 ThinkPHP 安全配置清单
一 基础部署与运行环境
- 将站点根目录指向 public,禁止直接暴露 thinkphp/、vendor/ 等目录;使用 Nginx + PHP-FPM 组合,PHP 建议 7.4+,并启用 PDO、OpenSSL、MBstring 等扩展。
- 生产环境务必关闭调试:设置 config/app.php → ‘app_debug’ => false;数据库等敏感配置写入 .env 并设置严格权限。
- 启用 HTTPS(如 Let’s Encrypt),对外仅开放 443,将 80 重定向到 443。
- 示例 Nginx 关键配置(隐藏入口与 PATH_INFO):
- root 指向 /var/www/html/your_project/public;
- location / 使用 try_files $uri $uri/ /index.php?s=$uri&$args;
- location ~ .php$ 转发到 PHP-FPM,并设置 SCRIPT_FILENAME $document_root$fastcgi_script_name。
- 如项目需要跨目录包含,合理设置 open_basedir(如:/var/www/html/your_project:/tmp:/proc),避免越权包含。
二 目录与文件访问控制
- 禁止访问敏感目录与文件:对 runtime/、config/ 等目录返回 403;Nginx 示例:
- location ~ ^/runtime/ { deny all; }
- location ~ ^/config/ { deny all; }
- 在 Apache 环境可用 .htaccess 禁止访问 config/、runtime/ 下的 .php 文件;
- 使用框架的目录安全机制:在入口定义 BUILD_DIR_SECURE => true,自动在相关目录写入安全文件(如 index.html),并可自定义文件名与内容;
- 保护模板目录:在模板目录放置 .htaccess,禁止直接访问模板文件(如 <Files *.html> Deny from all );
- 运行权限最小化:如 runtime/ 仅需 Web 写权限,生产可设为 0755 并限制运行用户;index.php 设为只读。
三 框架与应用层安全
- 关闭错误回显:生产环境关闭 PHP 错误报告 与框架调试,防止泄露路径、SQL、配置等敏感信息;
- 输入校验与过滤:对所有用户输入使用验证器与过滤器,输出时使用 XSS 过滤/转义;
- 防注入:始终使用 预处理/参数绑定 或 ORM,禁止拼接 SQL;
- 表单与状态变更保护:开启 CSRF 令牌(如 config/app.php → ‘csrf’ => [‘token_on’ => true]),在表单中加入 token 字段;
- 身份认证与授权:对外接口使用 JWT 或 API Key,后台采用 RBAC 细粒度控制;
- 文件上传安全:限制 类型、大小、扩展名与保存路径,必要时做 安全扫描 与 重命名;
- 安全编码:禁用危险函数(如 eval、exec、shell_exec、phpinfo 等),避免动态包含与代码执行。
四 服务器与网络防护
- 启用 HTTPS 全站加密,强制 HSTS,关闭弱协议与弱套件;
- 配置 防火墙(如 firewalld/iptables)仅开放 22/80/443,对管理口限制来源 IP;
- 部署 WAF/Rate Limiting(如 Nginx 限流、fail2ban)缓解暴力扫描与 CC 攻击;
- 限制目录遍历与访问:禁止 .git/、.svn/ 等版本控制目录对外访问;
- 日志与监控:集中采集 Nginx/PHP-FPM 与 应用日志,设置告警,定期审计异常请求与可疑文件。
五 维护与应急响应
- 持续更新 ThinkPHP 与依赖组件,关注官方安全通告,及时修补漏洞;
- 定期安全审计与代码审查,开展 渗透测试 与 依赖漏洞扫描;
- 备份与恢复演练:定期备份 代码、配置、数据库,验证可恢复性;
- 建立应急流程:一旦出现入侵迹象(如 Webshell、异常登录),立即下线服务、隔离实例、回溯 access/error 日志 与 runtime 日志,修补漏洞并全量恢复。