发现 WordPress 被入侵,第一反应别慌,也别急着改密码——攻击者很可能留了后门,你改完密码他照样能进来。正确的做法是先把后门找出来清掉,再加固。下面按排查顺序来。
第一步:判断是否真的被入侵
几个明显的迹象:
- 首页被篡改、跳转到博彩或钓鱼站
- 搜索引擎收录了大量无关页面(日语 SEO 垃圾注入)
- 服务器 CPU 跑满,但你的站点流量没变化
- 文件管理器里出现你不认识的 PHP 文件
- 数据库里 wp_users 多了管理员账号
先查数据库:
mysql -u root -p -e "SELECT ID, user_login, user_email, user_registered FROM wp_users ORDER BY ID;"
看有没有不认识的管理员账号。攻击者常用的手法是注册一个 user_login 看起来正常的账号(比如 wp_admin、system),然后赋管理员权限。
第二步:找后门文件
WordPress 后门最常见的形式是 PHP 文件被篡改或新增。用 find 配合时间戳排查:
# 找最近 7 天修改过的 PHP 文件
find /var/www/html -name "*.php" -mtime -7 -ls
# 找所有 PHP 文件里的可疑函数
grep -rl "eval\|base64_decode\|str_rot13\|gzinflate\|assert(" /var/www/html/wp-content/ --include="*.php"
重点排查这些位置:
wp-content/uploads/— 这个目录不该有 PHP 文件,有就是后门wp-content/themes/你的主题/— 检查 functions.php 是否被篡改wp-content/plugins/— 不认识的插件目录- 根目录的
wp-config.php— 看末尾有没有被追加代码 .htaccess— 检查有没有被加了 RewriteRule 跳转
另一个方法是用 WP-CLI:
wp core verify-checksums
# 这会对比 WordPress 核心文件是否被修改
如果报 “Warning: File not found” 或 “Checksum doesn’t match”,说明核心文件被动过。
第三步:清理后门
找到后门文件后,别直接删——先备份一份留证。然后处理:
uploads 目录的 PHP 文件:直接删。这个目录只该有图片、PDF 等媒体文件,任何 PHP 都是后门。
被篡改的主题/插件文件:从官方源重新下载对应版本覆盖。别手动一行行删恶意代码,容易漏。如果你用的是免费主题,直接重新下载 zip 覆盖整个目录。
wp-config.php 被追加代码:手动编辑,删掉被追加的部分。通常在 require_once ABSPATH . 'wp-settings.php'; 之后被追加了 base64 编码的 payload。
.htaccess 被篡改:用 WordPress 默认的规则替换:
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
第四步:清理数据库
检查 wp_options 表里的可疑项:
SELECT option_name, LENGTH(option_value) FROM wp_options WHERE LENGTH(option_value) > 5000 ORDER BY LENGTH(option_value) DESC;
攻击者经常把后门代码塞进 option_value 里,通过 do_option 钩子执行。看有没有不认识的 option_name,值是一长串 base64。
删除恶意管理员账号:
DELETE FROM wp_users WHERE ID = <恶意用户ID>;
DELETE FROM wp_usermeta WHERE user_id = <恶意用户ID>;
第五步:改密码 + 重置密钥
后门清干净后,改掉所有密码:
- WordPress 管理员密码(所有管理员都改)
- 数据库密码(改完同步到 wp-config.php)
- FTP/SFTP 密码
- 主机控制面板密码
重置 WordPress 安全密钥。到 https://api.wordpress.org/secret-key/1.1/salt/ 生成新的密钥,替换 wp-config.php 里的 AUTH_KEY 等那几行。这会让所有已登录用户 session 失效,攻击者的登录态直接作废。
第六步:防止再次入侵
排查入侵原因,堵住入口:
- 更新所有插件和主题到最新版(过时插件是最大入口)
- 删掉不用的插件和主题(即使不激活,代码也能被利用)
- 禁止 uploads 目录执行 PHP:在 uploads/.htaccess 加
php_flag engine off(Apache)或 nginx 配置里location ~* /wp-content/uploads/.*\.php$ { deny all; } - 装一个安全插件(Wordfence 或 Sucuri)做文件完整性监控
- 定期备份,出事能回滚
更多 WordPress 安全教程,请访问 fenij.com。
常见问题
问:清理完之后过几天又被入侵了怎么办?
答:说明后门没清干净,或者入口没堵。最可靠的办法是备份数据库,删掉整个 WordPress 目录,重新下载安装,再把数据库导回去。同时检查有没有被植入定时任务(crontab -l)或者 .bashrc 后门。
问:被入侵后 Google 收录了垃圾页面怎么处理?
答:清理后到 Google Search Console 提交移除请求,同时在 robots.txt 或页面 meta 里阻止这些 URL 被抓取。用 site:你的域名 搜索看还有没有残留垃圾收录。
问:怎么判断入侵是从哪个入口进来的?
答:看访问日志,找被入侵前后异常的请求。常见入口是过时插件的已知漏洞、弱密码爆破、以及主题编辑器被利用上传 PHP 文件。grep access.log 里的 POST 请求和 200 状态码的 PHP 文件访问。