Ubuntu下保障ThinkPHP安全的可落地清单
一 系统与运行时加固
- 保持更新:定期执行系统与安全组件更新(如 sudo apt update && sudo apt upgrade),并使用 Composer 更新 ThinkPHP 依赖,及时修补已知漏洞。
- 关闭调试与错误回显:生产环境将 APP_DEBUG=false、关闭 APP_TRACE,并在 php.ini 中设置 display_errors=Off,防止敏感信息泄露。
- 禁用危险函数:在 php.ini 的 disable_functions 中禁用 eval、exec、shell_exec、passthru、proc_open 等。
- 最小权限与目录隔离:Web 根目录仅指向 public/,将 application/、config/、runtime/ 等置于 Web 访问之外;设置文件权限为 0644、目录 0755,上传目录禁止脚本执行。
- 安全密钥:生成强随机 app_key(如 openssl rand -hex 32),避免密钥泄露导致加密与签名被伪造。
二 应用层防护要点
- 输入验证与过滤:使用 Validate 定义规则(必填、长度、格式、范围等),对输入进行白名单校验与过滤。
- 输出转义:模板中使用 |htmlspecialchars 或等效机制,统一转义输出,降低 XSS 风险。
- SQL注入防护:优先使用 ORM/查询构造器 的参数绑定与数组条件,避免字符串拼接 SQL。
- CSRF 防护:启用 CheckCsrfToken 中间件,在表单或 AJAX 请求中携带并校验 CSRF Token。
- 文件上传安全:限制 类型、大小、扩展名,对上传文件重命名,必要时进行 病毒扫描(如 ClamAV),并将上传目录移出 Web 可访问路径或限制执行权限。
- 会话与认证:使用 Session 或 JWT,为 API 采用 API Key/JWT;后台采用 RBAC 细粒度授权。
三 服务器与网络防护
- 启用 HTTPS:使用 Let’s Encrypt/certbot 申请免费证书,配置 Nginx/Apache 强制 HTTP→HTTPS 跳转。
- 防火墙与端口:使用 UFW 或 firewalld 仅开放 22/80/443,并对 SSH 设置速率限制(如 UFW 的 limit 规则)。
- 入侵防护:部署 fail2ban 监控暴力破解与异常访问。
- SSH 安全:修改 /etc/ssh/sshd_config,设置 PermitRootLogin no、使用 公钥登录、限制登录空闲超时。
- 服务最小化:禁用不必要的系统与服务,减少攻击面。
四 ThinkPHP目录与入口防护
- 访问隔离:将 入口文件 index.php 与 public/ 资源置于 Web 目录,其他代码与 runtime/ 放在 Web 之外;若无法分离,可使用 BUILD_DIR_SECURE 在受保护目录生成安全文件(如 index.html)阻止目录浏览。
- 禁止访问敏感目录:在 Nginx 配置中对 runtime/、application/ 等返回 403;对 .php 文件除入口外统一拒绝执行。
- 上传与缓存目录:仅赋予写入与读取权限,禁止脚本执行(如 Nginx location 匹配 uploads/ 并禁用 PHP 解析)。
五 运维与监控
- 错误与日志:生产环境关闭错误回显,仅记录必要错误日志;避免将 数据库凭证、密钥 写入日志;定期归档与清理 runtime/log。
- 备份与恢复:定期备份 数据库与代码,并进行离线/异地存储与恢复演练。
- 安全审计与依赖检查:定期审计代码与依赖,关注 ThinkPHP 官方与安全通告,及时升级修复。
- 速率限制与防滥用:对登录、注册、短信/邮件发送等接口实施 限流 与 验证码,降低暴力与滥用风险。