thinkphp漏洞修复包分两类:一是官方框架升级包(如6.0.14),用于修复cve-2022-38352等框架层rce,需通过composer升级并验证poc失效;二是业务代码补丁(如fix_eval_injection.patch),针对eval、call_user_func等危险调用,须人工审查应用并重构为白名单+静态映射,不可一键覆盖。

ThinkPHP 漏洞修复包不是直接“下载解压就能用”的通用补丁,它通常指两类东西:一是官方发布的框架升级包(如从 6.0.13 升级到 6.0.14),二是针对特定漏洞的手动代码修复补丁(如 CVE-2022-38352 或业务层 eval 注入的修复 diff)。正确应用的关键是匹配漏洞类型、确认当前版本、选择对应方式,并验证效果。
确认你拿到的是哪类修复包
先看文件名和说明:
-
如果是
thinkphp-6.0.14.zip或composer update topthink/framework:^6.0.14—— 这是框架升级包,用于修复 CVE-2022-38352 等框架层 RCE。必须核对当前版本(composer show topthink/framework)是否在影响范围内(如 6.0.0–6.0.13)。 -
如果是
fix_eval_injection.patch或类似 diff 文件 —— 这是业务代码修复补丁,针对你项目里自己写的eval()、call_user_func()调用。它不改框架,只改你 Controller/Command/Model 里的危险逻辑,需人工审查并应用。 -
临时加固脚本(如入口文件拦截代码) —— 不是“补丁包”,而是应急缓解措施,应放在
public/index.php开头,仅作过渡,不能替代根本修复。
框架升级型修复:用 Composer 安装最稳妥
推荐优先走 Composer 流程,避免手动覆盖出错:
- 运行
composer update topthink/framework:^6.0.14(注意^表示兼容更新,不会跨大版本) - 升级后检查
vendor/topthink/framework/src/下的composer.json中 version 是否为6.0.14或更高 - 清空缓存:
php think clear:all,并重启 Web 服务(尤其用了 OpCache 的环境) - 重点验证:原漏洞 PoC(如
?s=index/\think\app/invokefunction&function=phpinfo)应返回 404 或 403,不再执行代码
业务代码补丁:必须人工介入,不能一键覆盖
这类补丁修复的是你写的代码,比如动态调用方法或模板 eval,自动打 patch 极易破坏逻辑:
- 用
patch -p1 尝试应用,但务必检查输出中是否有 <code>FAILED;失败说明上下文已变,需手动比对 - 打开补丁里提到的文件(如
app/command/VpsTest.php),定位到eval($code)行,替换成白名单校验 + 反射调用,或直接重构为配置驱动 - 特别注意:含
$$var、call_user_func($callback, ...)、include($user_file)的地方,全部按“输入白名单 + 静态映射”方式重写 - 修复后,用单元测试或手工构造恶意参数(如
?callback=system&cmd=whoami)验证是否被拦截
验证是否真正生效
别只看“没报错”,要主动测利用链:
- 对反序列化漏洞(CVE-2022-38352),用公开 PoC 生成 payload,发 POST 请求,观察是否仍触发
Php::display - 对 eval 注入,尝试传
?action=<?php phpinfo();?>或 base64 编码 payload,确认返回 403 或空响应 - 检查日志:
runtime/log/下是否还有unserialize、eval相关警告;WAF 日志是否记录拦截 - 生产环境上线前,建议用 SAST 工具(如 Semgrep)扫描全项目,搜索
eval\(、call_user_func、unserialize\(等关键词,确保无遗漏
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











