最容易被忽略的ThinkPHP漏洞包括:调试模式未关闭致凭据泄露、auto_prepend_file被篡改加载隐藏后门、上传功能仅校验扩展名而放行.htaccess、order by参数未过滤引发SQL注入。

ThinkPHP漏洞大全里最容易被忽略的有哪些
ThinkPHP网站突然被黑,很多开发者第一反应是“我代码没问题”,却没意识到漏洞可能藏在框架配置、PHP底层设置或升级动作本身——比如public/index.php已更新,但app/目录下残留的think/App.php仍是5.0.21旧版,攻击者正通过这个文件绕过所有补丁直打RCE。
调试模式开着却不自知
ThinkPHP默认开启APP_DEBUG=true时,错误页面会直接暴露数据库账号、密码、绝对路径和完整调用栈。攻击者只需访问一个不存在的控制器,比如/index.php?s=/index/missing,就能拿到root@localhost:3306的明文凭据。
检查方法:打开config/app.php,搜索APP_DEBUG;若值为true或未定义(低版本默认true),立即改为false。
注意:有些项目用.env文件覆盖配置,必须同时检查APP_DEBUG=false是否生效,【仅改config/app.php而忽略.env会导致调试模式依然开启】。
立即学习“PHP免费学习笔记(深入)”;
auto_prepend_file被篡改却查不到webshell
表面删光了gsl.php、logo.jpg.php等可疑文件,网站仍持续被植入后门——大概率是php.ini里的auto_prepend_file被恶意写入了一行路径,让每个PHP脚本执行前先加载一段隐藏代码。
第一步:运行php --ini找到加载的php.ini位置
第二步:用grep -i auto_prepend_file /path/to/php.ini查看该配置项
第三步:若值不为空且不是你主动配置的(如/tmp/.cache.php、/var/log/apache2/.init.php),立刻清空并重启PHP-FPM或Apache
这一步操作起来很简单,直接把文件拖进去就行。但90%被入侵站点都没查过这里,因为日志里看不到请求记录,webshell也根本不在网站目录里。
上传功能只校验扩展名却放行.htaccess
很多团队以为限制上传类型为jpg/png就安全了,却忘了攻击者能上传.htaccess文件,再配合Apache解析规则把.jpg当作PHP执行。
方法一:在Nginx配置中加location ~ \.htaccess { deny all; }
方法二:ThinkPHP上传类中强制过滤['htaccess', 'php', 'phtml']等危险后缀,不只是白名单允许的类型
方法三:将上传目录移出Web根目录,用独立路由+readfile()输出图片——这是唯一真正阻断任意文件执行的方案
【即使用了方法一和方法二,只要上传目录仍在public/下,攻击者仍可通过目录遍历+解析漏洞触发RCE】
SQL注入藏在order by参数里
ThinkPHP对where条件做了绑定保护,但对order/group参数完全不做过滤。开发者常这样写:$sort = input('sort'); Db::table('user')->order($sort)->select();
攻击者传?sort=id ASC, (SELECT COUNT(*) FROM information_schema.tables) as x,直接拖库表结构
修复方式只有两种:硬编码排序字段(如in_array($sort, ['id', 'name', 'create_time']))或用Db::raw()包裹并严格转义
别信“用户不会乱输”——自动化扫描器每秒发37个payload,你永远不知道哪个请求来自真实黑客还是bot。



















