必须立即阻断日志泄露与调试信息暴露,分别修补TP3.2.3的控制器绕过和模板注入、TP5.0.24的HTTP方法伪造、反序列化及eval过滤漏洞,强制路由与输入白名单过滤,并尽快迁出至TP6.1+或TP8.x。

ThinkPHP 3.2.3 和 5.0.24 都属于已明确存在多个高危漏洞的老旧版本,不能“兼容共存式修复”,必须按风险等级分优先级处理:先阻断、再清理、最后升级替代。两者漏洞类型不同但危害叠加,一起暴露时攻击面极大,需同步处置。
立即阻断日志泄露与调试信息暴露
这是两类版本共有的基础性风险,也是攻击者最常利用的入口。 - 将 APP_DEBUG = false(TP3.2.3 在Conf/config.php;TP5.0.24 在 app.php 或 extra/debug.php)
- 删除全部日志目录内容:Runtime/Logs/(TP3.2.3)、runtime/log/(TP5.0.24),并设置目录权限为 750 或禁止 Web 直接访问(如 Nginx 中添加 location ~ ^/runtime/.*\.(log|php)$ { deny all; })
- 检查是否残留 index.php?m=Home&c=Index&a=index&debug=1 类调试参数,统一在入口文件或中间件中过滤掉所有含 debug、test、showsql 的 GET/POST 参数
分别修补各自核心漏洞
TP3.2.3 和 TP5.0.24 的漏洞成因不同,需针对性修复,不可套用同一补丁。 - 对于 TP3.2.3:重点修复控制器方法调用绕过和模板注入 - 关闭空模块/空操作自动匹配(在Conf/config.php 加 'DEFAULT_MODULE' => 'Home', 'DEFAULT_CONTROLLER' => 'Index', 'DEFAULT_ACTION' => 'index',并禁用 MODULE_ALLOW_LIST)
- 升级或替换 Think/Template.class.php,移除 shellexec、eval 等危险函数在模板解析中的调用逻辑
- 对于 TP5.0.24:必须处理三类关键漏洞
- 修改 thinkphp/library/think/Request.php 中的 method() 方法,加入 HTTP 方法白名单校验(仅允许 GET/POST/PUT/DELETE/PATCH)
- 修改 thinkphp/library/think/process/pipes/Windows.php,增加 __sleep 和 __wakeup 抛异常限制反序列化
- 禁用 input 函数的默认 eval 过滤器(检查 filter 参数是否被用户可控输入带入)
强制路由与输入过滤双加固
这是跨版本通用且见效最快的安全层。 - 开启强制路由:TP3.2.3 在Conf/config.php 加 'URL_ROUTER_ON' => true;TP5.0.24 在 route.php 中设 'url_route_on' => true,并定义完整路由规则,禁用动态方法调用
- 所有外部输入(GET/POST/COOKIE/FILES)必须经过白名单过滤:
- 数值型字段用 intval() 或 filter_var($val, FILTER_VALIDATE_INT)
- 字符串字段用 htmlspecialchars() + 正则限定字符集(如用户名只允许 /^[a-zA-Z0-9_\x{4e00}-\x{9fa5}]{2,16}$/u)
- 文件上传严格校验 $_FILES['xxx']['type'] 和后缀,重命名存储,禁止执行权限



















