phpMyAdmin低于5.2.2存在CVE-2023-38023 CSRF漏洞,攻击者诱导点击即可执行SQL导入、删库等操作;修复方式为升级至5.2.2+,强制token校验并绑定会话ID与IP哈希前缀。
phpMyAdmin 版本低于 5.2.2 存在已知 CSRF 漏洞(CVE-2023-38023)
如果你用的是 phpmyadmin 5.2.1 或更早版本,且启用了默认会话机制($cfg['logincookievalidity'] 未设为极短时间),那么用户点击恶意链接后,可能在未授权情况下执行 sql 导入、数据库删除、用户权限修改等操作。这个漏洞不依赖 xss,仅靠诱导点击即可触发。
修复方式非常直接:升级到 5.2.2 或更高版本。官方已在该版本中为所有敏感操作(如 import.php、tbl_drop.php、user_password.php)强制校验 token 参数,并绑定当前会话 ID 与 IP 的哈希前缀(非完全 IP 绑定,避免 NAT 环境失效)。
- 不要尝试手动打补丁——
token验证逻辑散落在多个文件(libraries/classes/Token.php、libraries/common.inc.php),补漏成本高于升级 - 升级前确认 PHP 版本 ≥
7.4(5.2.2不再支持7.2或更低版本) - 若无法立即升级,临时缓解可设置
$cfg['LoginCookieValidity'] = 60;(单位秒),但仅降低攻击窗口,不消除漏洞
升级后仍出现 “Token mismatch” 错误?检查 session.save_path 和 cookie 设置
新版 phpMyAdmin 对 token 的生成和校验强依赖会话一致性。常见报错 Token mismatch 并非漏洞残留,而是环境配置导致 token 无法正确传递或读取。
-
session.save_path权限错误:Web 服务器用户(如www-data)必须对路径有读写权限,否则每次请求都新建会话,token值不匹配 -
session.cookie_httponly和session.cookie_samesite设置不当:若设为Strict且跨子域访问 phpMyAdmin(如从admin.example.com访问phpmyadmin.example.com),token cookie 可能被浏览器拦截 - 反向代理未透传
Cookie头:Nginx/Apache 配置中漏掉proxy_pass_request_headers on;或ProxyPreserveHost On,导致后端收不到原始 cookie
自定义部署时禁用 token 校验?绝对不要
有人在调试时注释掉 checkToken() 调用,或把 $cfg['CheckConfigurationPermissions'] 设为 false,以为只是“跳过安全检查”。这等于主动关闭 CSRF 防护开关。
-
checkToken()不是可选装饰——它嵌在common.inc.php入口处,绕过它会让所有 POST 接口暴露 -
$cfg['CheckConfigurationPermissions']控制的是配置文件读写检查,和 token 无关;设为false只会掩盖文件权限问题,不解决 CSRF - 开发环境也必须启用 token:本地测试时用
localhost访问,cookie 默认同源,不会因 domain 设置异常而失效
确认修复是否生效:用 curl 模拟无 token 提交
最简单的验证方式,不是看界面有没有报错,而是主动触发一次缺失 token 的敏感请求,观察是否被拦截。
curl -X POST http://your-pma.example.com/tbl_drop.php \ -d "ajax_request=true" \ -d "sql_query=DROP TABLE test_table;" \ -b "pmaAuth-12345=your_session_cookie_value"
如果返回 JSON 中包含 "success":false 和 "error":"Invalid token",说明防护已生效。如果返回 "success":true 或 HTML 重定向,则说明 token 校验未起作用——大概率是版本未更新,或 common.inc.php 被意外修改。
真正难排查的点在于:漏洞利用不需要登录态持久化,只要用户当前会话有效,哪怕刚输完密码几秒钟,攻击就能完成。别依赖“用户很小心”来防御。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!










