ThinkPHP8.0新版还有哪些常见漏洞需要提前处理

轻伟大大_8905

轻伟大大_8905

2026-07-31

256人浏览

原创

ThinkPHP 8.0+高频漏洞仍存:反序列化链未断(Validate类__call可触发RCE)、路由变量未约束致路径遍历、多应用Session配置失效引发越权、软删除缓存键缺失delete_time字段、CORS credentials与*通配符冲突。

thinkphp8.0新版还有哪些常见漏洞需要提前处理

ThinkPHP 8.0 新版(含 8.0.x 至 8.1.0)虽已大幅强化安全机制,但实际项目中仍存在几类高频、隐蔽且易被忽视的漏洞点,不及时处理可能引发 RCE、会话劫持或数据泄露。重点不是“有没有漏洞”,而是哪些漏洞在升级后仍因配置或使用不当而持续生效。

反序列化链未完全切断,Validate 类仍是高危入口
8.0.0 初始版本中 think\Validate 的 __call() 方法可被构造恶意参数触发 call_user_func_array,配合可控 $this->type 数组执行任意函数。虽 8.0.3+ 已对 type 字段加了白名单校验,但若项目手动扩展了验证规则并动态注册了危险回调(如 ['shell_exec' => 'shell_exec']),该链仍可复现。

  • 检查所有自定义验证器类,禁止将用户输入直接赋值给 $validate->type[$rule]
  • 确认 vendor/topthink/framework/src/think/Validate.php 中 __call() 方法内是否保留 isset($this->type[$rule]) 且未做 in_array($rule, $safeRules) 校验
  • 若用到了 rule => ['is' => 'xxx'] 这类动态规则,需确保 xxx 是预定义安全方法名,而非拼接字符串

路由变量未约束导致路径遍历与注入穿透
ThinkPHP 8.0 默认允许 :id 匹配任意字符(包括 ../、%2e%2e%2f),若控制器中直接拼接路径(如 file_get_contents('./data/' . $id . '.json')),就构成路径遍历。更隐蔽的是:当路由定义为 Route::get('api/:version/:action', ...) 且未限制 :version 时,攻击者传入 v1.5%00 可绕过后续正则校验,触发空字节截断或 JSON 解析异常。

  • 所有含变量的路由必须显式加正则约束:':version([a-z0-9._]+)'、':action([a-zA-Z]+)'
  • 避免在业务逻辑中直接拼接用户可控路由变量到文件路径、SQL 字段名或 shell 命令中
  • 启用 config/route.php 中的 'url_domain_deploy' => true,防止子域名污染主路由上下文

多应用 Session 共享配置失效引发越权登录
8.0 多应用模式下,若 config/session.php 中 cookie_domain 写成 example.com(缺前置点)或 www.example.com(限死单域名),浏览器不会向 admin.example.com 发送 Cookie;更严重的是,若 Redis 存储未设统一 prefix,www 应用写入的 session 数据会被 api 应用读取失败,框架自动新建 session,导致用户登录态丢失——此时前端常重试登录,反而暴露账号密码。

  • cookie_domain 必须为 .example.com(带前导点)
  • prefix 必须为空字符串或全站一致(如 'sess_'),不能是 'www_sess_' 和 'api_sess_' 混用
  • 在 app/middleware.php 中确认 \think\middleware\SessionInit::class 已启用且位于数组首位

模型缓存键未包含软删除字段,导致逻辑删除数据仍返回
启用 cache() 查询时,若缓存键未纳入 delete_time 字段,软删除后的记录仍从缓存中读出,用户看到已被“删除”的敏感信息。例如:UserModel::where('status', 1)->cache(['user_list'], 3600)->select(),当某条记录 later 被 delete(),缓存不变,接口持续返回该记录。

  • 所有涉及软删除模型的缓存键,必须显式包含 delete_time 值:cache(['user_list', $status, $user->delete_time ?? 0], 3600)
  • 或改用 withTrashed() + 缓存,但需同步调整业务逻辑判断

CORS 配置中 credentials 与通配符 Origin 同时启用
'allowed_origins' => ['*'] 与 'supports_credentials' => true 并存时,浏览器直接拒绝响应(违反 CORS 规范),前端报错 The value of the 'Access-Control-Allow-Origin' header must not be the wildcard '*' when the request's credentials mode is 'include'。这不是 ThinkPHP 的 bug,而是配置冲突。

PHP 8.5.12
PHP 8.5.12

修复 Core bailout 状态损坏安全问题,以及 BZ2、DOM、PDO、Opcache/JIT 内存与执行错误,改进 Unicode 字素处理、URL 解析、TLS 流状态、信号分发及会话错误处理。

下载
  • 若前端带 Cookie 请求(credentials: 'include'),allowed_origins 必须为具体域名数组,不可含 *
  • 开发环境可临时用 $_SERVER['HTTP_ORIGIN'] 动态匹配白名单,但生产环境必须硬编码可信源

这些漏洞大多不源于框架代码本身,而来自配置疏漏、开发习惯或旧项目迁移遗留。修复成本不高,但一旦触发,影响直接且难以追溯。

php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!

相关文章

PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

thinkphp php php8

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
Vite 项目如何打包和部署
Vite 项目如何打包和部署

Vite项目打包部署专题汇集生产构建、产物预览、输出目录、资源路径、Nginx与GitHub Pages部署及常见白屏和路由404问题的已审核文章,帮助读者完成上线流程。

2026.10.28

80

16

Vite 如何搭配 Vue.js
Vite 如何搭配 Vue.js

Vite搭配Vue.js专题汇集创建Vue 3项目、配置开发环境、路径别名、Vue插件、代理、多环境构建与调试的已审核文章,帮助读者完成从初始化到日常开发的配置。

2026.10.28

60

15

Vite 项目目录怎么看
Vite 项目目录怎么看

Vite项目目录专题汇集入口文件、src源码、public静态资源、路径别名、项目根目录和构建输出目录相关的已审核文章,帮助读者理解各文件夹的用途与引用方式。

2026.10.28

200

10

Gradle插件开发入门教程
Gradle插件开发入门教程

本专题介绍Gradle插件开发的基本流程,涵盖插件类编写、自定义任务注册、扩展参数设计和插件应用方法,帮助你理解插件如何组织构建逻辑,减少多个项目之间的重复配置。

2026.10.22

140

11

Gradle Wrapper配置教程
Gradle Wrapper配置教程

本专题介绍Gradle Wrapper的基本作用,涵盖文件组成、生成方法、版本配置和任务调用,帮助你理解项目如何使用指定的Gradle版本,减少不同开发环境带来的构建差异。

2026.10.22

120

10

Golangci-lint检查器使用教程
Golangci-lint检查器使用教程

本专题整理Golangci-lint常用Linters的用途与配置方法,覆盖错误处理、无效代码、安全、复杂度、命名和依赖检查,帮助项目合理选规则。

2026.10.22

80

15

Gradle怎么构建Java项目
Gradle怎么构建Java项目

本专题介绍Gradle Java项目构建方法,涵盖Java插件配置、依赖声明、源码编译、测试执行和打包检查,帮助你理解各阶段的任务关系,逐步完成项目构建。

2026.10.22

60

10

PHP时间戳漏洞修复教程
PHP时间戳漏洞修复教程

本专题汇总PHP常见时间戳漏洞,包括2038年溢出、时区漂移、时间戳伪造、重放攻击、时间盲注与日志审计失效等,并给出升级64位环境、使用 DateTimeImmutable、统一UTC、严格超时校验、预处理绑定、hash_equals 比对等修复方案,帮助开发者快速排查和加固时间相关代码。

2026.10.22

80

25

Golangci-lint配置文件与规则设置
Golangci-lint配置文件与规则设置

本专题聚焦Golangci-lint YAML配置文件,讲清运行参数、规则启停、目录排除、问题过滤及严重级别设置,便于团队统一检查标准。

2026.10.22

40

15

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程