ThinkPHP 6.0.10虽未单独披露反序列化RCE漏洞,但处于高危窗口期,存在可链式利用的__destruct/__wakeup风险点;需重点排查unserialize()直接调用、第三方扩展反序列化逻辑及调试模式泄露栈信息三类场景,并通过禁用unserialize、加固Session、拦截序列化特征、关闭调试及运行时防护等措施手动加固。

ThinkPHP 6.0.10 官方未单独披露“反序列化RCE漏洞”,但该版本处于 6.0.x 系列高危窗口期,存在多个可被链式利用的反序列化风险点——尤其是当应用不当调用 unserialize()、未校验用户输入的序列化数据、或配合日志/缓存/Session等组件时,可能触发任意代码执行。
确认是否受影响
重点排查以下三类场景:
- 控制器或中间件中直接对用户可控参数(如 Cookie、POST 字段、URL 参数)调用
unserialize(); - 使用了自定义反序列化逻辑的第三方扩展(如某些旧版缓存驱动、日志处理器);
- 启用了调试模式且错误信息暴露了反序列化调用栈(例如报错中出现
__wakeup、__destruct或think\cache\driver\File等关键词)。
核心补丁措施
不依赖升级到 6.1+(因 6.0.10 已停止维护),需手动加固:
-
禁用危险反序列化入口:全局搜索项目中所有
unserialize(调用,替换为json_decode((推荐)或igbinary_unserialize((需启用 igbinary 扩展并确保可信来源); -
重写 Session 处理器:若使用默认
File或Redis驱动,确保 Session ID 不可被用户篡改;在config/session.php中设置'use_trans_sid' => false,并强制校验 Session ID 格式(仅含字母数字,长度 32); -
拦截可疑反序列化载荷:在入口文件
public/index.php或全局中间件中添加前置过滤,对含O:、C:、a:等 PHP 序列化特征的请求参数(如_token、data、payload)直接拦截并记录; -
关闭调试模式与错误回显:确保
app_debug = false且display_error = false,避免泄露反序列化链细节;删除或注释.env中的APP_DEBUG=true。
运行时防护补充
即使代码层修复,仍建议叠加运行时缓解:
- 在 PHP 配置中禁用危险函数:
disable_functions = unserialize,pcntl_exec,system,passthru,shell_exec,exec,proc_open; - Web 服务器层面限制访问敏感路径:Nginx 添加
location ~ \.(log|sess|dat)$ { deny all; },防止攻击者读取反序列化缓存文件; - 启用 OPcache 并设置
opcache.validate_timestamps=0(生产环境),减少动态类加载带来的反序列化面。
验证是否修复成功
完成修改后务必验证:
- 手动构造典型 payload(如
O:8:"stdClass":0:{})提交至疑似接口,确认返回 400 或空响应,而非报错或执行; - 检查日志目录(
runtime/log/)是否仍生成含unserialize关键词的错误记录; - 使用工具(如 phpggc)生成 ThinkPHP 6.0 兼容 gadget,尝试触发,应无法执行任意命令。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











