ThinkPHP被入侵后重置密码和密钥必须阻断攻击链、清除残留、重建可信边界:立即隔离、日志溯源、进程端口排查、数据库凭证全量重置、APP_KEY等密钥强制轮换、Webshell与恶意扩展彻底清理,并验证加固措施生效。

立即隔离与应急响应
停止所有对外服务(如临时关闭站点或切至维护页),避免攻击者持续横向移动;检查 Web 访问日志、PHP 错误日志、runtime/log/,定位入侵入口(常见于未授权上传、反序列化点、第三方插件漏洞、弱口令后台);用 ps aux | grep php-fpm 和 netstat -tulnp 查看异常进程与监听端口;备份当前状态(仅用于取证,勿保留到生产环境)。
数据库密码与用户凭证全量重置
登录数据库管理端(如 phpMyAdmin 或命令行),执行以下操作:
- 重置所有应用账号密码:如
UPDATE mysql.user SET authentication_string=PASSWORD('新强密码') WHERE User='tp_app'; FLUSH PRIVILEGES; - 清空或重置 ThinkPHP 的管理员表(如
admin或user表)中所有密码字段,强制使用password_hash($pwd, PASSWORD_ARGON2ID)重新生成(禁用 md5 / sha1) - 删除所有长期有效的 token、remember_token、api_token 字段值(设为 NULL 或空字符串)
- 检查是否存在隐藏的后门账号(用户名含
test、hack、sys_等非常规命名)
全部密钥与配置项强制轮换
密钥一旦可能泄露,就必须视为已泄露——不能“假设没被拿到”。需重置以下所有项:
-
APP_KEY:生成全新 32 字节随机值,用
base64:xxx格式写入.env,确保config/app.php中通过env('APP_KEY')读取 -
数据库密码、Redis 密码、JWT Secret、AES 加密密钥:全部从系统级环境变量注入(如 Linux 下
export DB_PASSWORD="..."),.env仅用于本地开发,生产环境禁用 - API 接口加解密密钥(如 AES-CBC 的 key/iv):更换后同步更新前端 SDK 或 App 内置逻辑(若密钥硬编码在客户端,必须发版修复)
- 所有第三方服务凭证:短信平台、邮件 SMTP、微信支付 APIv3 密钥、阿里云 OSS AKSK —— 全部在对应服务商后台禁用旧密钥、生成新密钥
代码层与运行时环境清理
入侵常伴随 Webshell、隐蔽后门、恶意扩展:
立即学习“PHP免费学习笔记(深入)”;
- 删除
public/下所有非标准文件(尤其是.php、.phtml、.phar后缀的可疑脚本),重点检查public/uploads/、public/images/、runtime/子目录 - 核对
composer.lock与线上实际加载的扩展,运行composer show检查是否有未知包(如monolog/core、symfony/debug-bundle等伪装包) - 检查
php.ini是否被篡改:确认disable_functions未移除exec,shell_exec,system,passthru,proc_open;查看extension_dir路径下是否存在非官方扩展(如backdoor.so) - 重装 PHP 扩展:尤其涉及加密(screw-plus)、日志(runkit)、调试(xdebug)类扩展,应从官方源重新编译安装
验证与加固收尾
重置完成后必须验证是否真正生效:
- 用
php think optimize:config重新生成配置缓存,确认无报错;访问接口测试返回是否正常、状态码是否正确 - 检查
$_ENV和getenv()输出,确认密钥未回显(禁止在页面或日志中打印敏感变量) - Nginx/Apache 配置中确认已加入:
location ~ /\.(env|log|git|lock|tpl)$ { deny all; },并重启服务 - 启用 ThinkPHP 的内置安全中间件(如
think\middleware\TrustHost、think\middleware\Token),并在全局中间件中开启请求签名校验



















