为什么要校验WordPress核心文件?
WordPress核心文件(/wp-admin/、/wp-includes/ 和根目录的PHP文件)是最常被攻击者篡改的位置。黑客会在这些文件中植入:
- 后门代码:允许攻击者随时重新进入网站
- 恶意重定向:将访客跳转到赌博、钓鱼等网站
- 挖矿脚本:利用访客浏览器资源挖加密货币
- 数据窃取代码:记录用户登录信息或信用卡数据
核心文件校验的原理:WordPress官方在每个版本都有固定的文件内容,通过与官方版本对比,可以精确定位哪些文件被修改过。
方法一:WP-CLI命令行(推荐)
WP-CLI 是WordPress官方命令行工具,内置了核心文件完整性检查命令。
安装WP-CLI
# 下载WP-CLI
curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar
# 检查是否正常工作
php wp-cli.phar --info
# 移动到全局路径(可选)
chmod +x wp-cli.phar
sudo mv wp-cli.phar /usr/local/bin/wp
执行核心文件完整性检查
# 进入WordPress根目录
cd /path/to/your/wordpress
# 检查核心文件完整性(与官方版本对比)
wp core verify-checksums
# 如果发现篡改,输出类似:
# Warning: File should not exist: wp-admin/css/wp-admin.php
# Warning: File doesn't verify against checksum: wp-includes/functions.php
自动修复被篡改的核心文件
# 重新下载并替换所有核心文件(不影响wp-content和wp-config.php)
wp core download --force
# 指定版本(如果当前是6.4.3)
wp core download --version=6.4.3 --force
--force 参数会强制替换现有文件,但不会删除额外添加的文件(如黑客添加的新PHP文件)。
方法二:手动下载替换
如果没有SSH访问权限,可以手动操作:
第一步:确认当前WordPress版本
登录WordPress后台 → 右上角可以看到版本号,或查看 wp-includes/version.php:
grep "wp_version =" wp-includes/version.php
# 输出:$wp_version = '6.4.3';
第二步:下载对应版本的WordPress
前往 https://wordpress.org/wordpress-6.4.3.zip(替换为你的版本号),下载完整压缩包。
第三步:替换核心文件
可以安全替换的目录/文件(不含用户数据):
– /wp-admin/ — 完整替换整个目录
– /wp-includes/ — 完整替换整个目录
– index.php
– wp-login.php
– wp-cron.php
– wp-settings.php
– wp-load.php
– wp-blog-header.php
– wp-comments-post.php
– xmlrpc.php
– wp-links-opml.php
– wp-mail.php
– wp-signup.php
– wp-trackback.php
千万不要替换:
– wp-content/ — 包含你的主题、插件和上传文件
– wp-config.php — 包含数据库连接信息
第四步:通过FTP上传
用FileZilla等FTP工具连接服务器,将下载的WordPress文件上传,选择覆盖现有文件。
方法三:通过Wordfence扫描和修复
Wordfence Security插件可以自动检测并修复被篡改的核心文件:
- 安装并激活 Wordfence
- 进入 Wordfence → 扫描 → 开始新扫描
- 扫描完成后,查看”WordPress核心文件已被修改”类型的结果
- 点击每个问题旁边的 “修复” 按钮,自动替换为官方版本
- 对于”应删除的文件”,点击 “删除文件”
检测额外添加的恶意文件
除了被篡改的文件,黑客还可能新增了恶意文件。这些文件不会被 wp core verify-checksums 检测到,需要单独处理:
查找最近新增的PHP文件
# 查找7天内修改的PHP文件
find /path/to/wordpress -name "*.php" -mtime -7
# 查找wp-content之外最近新增的PHP文件
find /path/to/wordpress -name "*.php" -mtime -7 -not -path "*/wp-content/*"
# 查找隐藏文件(以.开头)
find /path/to/wordpress -name ".*" -type f
检测常见恶意代码特征
# 检测base64编码的混淆代码
grep -r "eval(base64_decode" /path/to/wordpress --include="*.php" -l
# 检测system()、exec()等危险函数调用
grep -r "eval\s*(\|system\s*(\|exec\s*(\|passthru\s*(" /path/to/wordpress --include="*.php" -l
# 检测可疑的文件头
grep -r "<?php /\*" /path/to/wordpress/wp-includes --include="*.php" | grep -v "WordPress"
替换完成后的验证步骤
完成核心文件替换后,按以下步骤验证:
- 再次运行
wp core verify-checksums— 确认不再有警告 - 检查网站前台是否正常 — 访问首页、文章页、联系页
- 检查后台是否可正常登录 — 并确认没有未知管理员账户
- 用 Sucuri SiteCheck 在线扫描 — 确认恶意代码标记消失
- 查看Search Console安全问题 — 确认问题已消除
预防核心文件被篡改的措施
文件权限设置:
# WordPress目录权限标准配置
find /path/to/wordpress -type d -exec chmod 755 {} \;
find /path/to/wordpress -type f -exec chmod 644 {} \;
# wp-config.php权限设为更严格
chmod 600 wp-config.php
通过.htaccess保护wp-config.php:
<Files wp-config.php>
order allow,deny
deny from all
</Files>
通过Wordfence启用文件变更监控:
进入 Wordfence → 所有选项 → 扫描选项 → 启用”检测核心文件变更”选项,并设置Email告警。
总结
| 方法 | 适合场景 | 覆盖范围 |
|---|---|---|
| WP-CLI verify-checksums | 有SSH访问权限 | 仅检测被修改的文件 |
| WP-CLI core download –force | 有SSH,需批量替换 | 自动替换所有被修改核心文件 |
| 手动FTP替换 | 只有FTP权限 | 完整替换核心目录 |
| Wordfence扫描修复 | 无技术背景 | 检测并修复,有UI操作 |
如果情况复杂(如大量文件被修改、不确定入侵范围),建议寻求专业的WordPress安全修复服务,避免遗漏恶意代码导致问题复发。