信科网络 · 11 年只做 WordPress | 建站 / 主题 / 插件 / 商城 / 迁移 / 托管 | 累计服务 3000+ 企业 | 源码全交付
服务热线:13280692153 邮箱:web@wordpressx.com
工作日 08:30-18:0013280692153 免费诊断
首页/WordPress 被黑后的清理与加固
HACKED SITE RECOVERY

WordPress 被黑后的清理与加固
先止血,再取证,最后才谈重装

站点被挂马后,最常见的错误动作是改掉后台密码就以为处理完了。后门往往不在后台:在 uploads 里一张长着 .jpg 后缀的 PHP,在主题 functions.php 末尾追加的几行 eval,在 wp_options 那条序列化的定时任务里。这一页按处置顺序写:怎么确认、木马在哪、按什么次序清、清完换哪些密钥。

电话咨询 13280692153 提交需求

11 年WordPress 深耕
3000+服务企业
24 小时应急响应窗口
100%源码交付

FIRST SIGNS

被黑的五种迹象
首页往往是最晚露出破绽的地方

入侵者很少直接改首页,太显眼。更常见的是长期寄生:借你的域名做搜索排名、拿服务器发垃圾邮件。出现任一信号,都该按被入侵排查。

01

搜索结果变成外文垃圾词

用 site:域名 查询,出现大量日文、博彩类标题,点进去却正常。这是寄生页面:攻击者在 wp_posts 写入独立文章,只在识别到爬虫 UA 时才输出。

  • 换 UA 抓取比对返回内容
  • 查 post_status 为 publish 的陌生记录
02

手机端被跳转

电脑打开正常,手机跳到第三方站点。跳转代码一般藏在 header.php 或某个小工具选项里,外面套一层 UA 判断。用 curl -A "iPhone" 抓一次 HTML 搜 location 即可定位。

03

后台多出陌生管理员

用户列表出现不认识的账号,邮箱是临时域名。也有更隐蔽的做法:不改 wp_users,只往 wp_usermeta 给已有账号追加 administrator 能力,界面上看不出异常。

04

主机商发来 abuse 通知

说你名下服务器在对外发垃圾邮件、参与撞库或 DDoS。到这个阶段,问题已从挂马升级为被当作基础设施使用,处理要连带查 SSH 与邮件服务配置。

05

文件修改时间集中在凌晨

几十个文件的修改时间落在同一天凌晨三点,而那天没人登录过后台。这是批量写入后门的典型特征,比任何扫描器都直接。

  • 用 find -newermt 按日期筛
  • 缓存与 uploads 的变动单独看

WHERE MALWARE HIDES

木马常见的六个藏身位置
按被发现的频率排序

清理不彻底,八成是因为只扫了主题和插件目录。下面六处里,有三处在常规扫描器的默认范围之外。

01

wp-content/uploads

最常见,因为这里允许上传、目录深、文件多、没人逐个点开看。伪装手法有三种:双扩展名如 shell.php.jpg;图片头部保留 JPEG 幻数、后半段接 PHP;文件名随机成八位字母,混在几千张产品图里。

  • find wp-content/uploads -name "*.php",正常站应为空
  • 按月份建子目录的站,重点看近三个月
02

主题的 functions.php

不是整个文件替换,而是末尾追加一小段:base64 解码后 eval,或者判断某个 POST 参数存在才执行。能躲过按哈希比对的扫描,因为主题更新会覆盖回去,攻击者随后再写一遍。

  • 看文件末尾多出的空行与注释块
  • 正版主题不会出现 eval、assert
03

wp-includes 与 wp-admin

直接改核心文件,比如在 wp-includes/pluggable.php 里插一段只对特定来源 IP 生效的逻辑。人眼几乎发现不了,但用官方校验和能一次比对出来,这是性价比最高的检查手段。

04

wp_options 里的 cron

option_name = 'cron' 那一行的值是个序列化数组。攻击者塞进一个每小时执行的钩子,指向已被篡改的主题函数。文件层面看不出异常,只在库里多了一行。

  • 查 option_value 里的钩子名
  • 正常以 wp_ 开头,随机字符串要警惕
05

mu-plugins 与 drop-in

mu-plugins/ 下的文件自动加载、不出现在插件列表,是天然隐蔽点。另一类是 drop-in:advanced-cache.php、object-cache.php、db.php,WordPress 优先加载它们,替换后可劫持缓存与登录校验。

06

配置文件与 .htaccess

wp-config.php 顶部被插入混淆代码,位置在 require 之前,所以一定先执行。.htaccess 里加一行 RewriteRule 把特定 UA 导流到外部站,这条规则生效不留任何访问日志。

  • 比对 .htaccess 与备份的差异
  • wp-config 只应有注释、常量、require

TRIAGE COMMANDS

怎么在半小时内定位
四条命令加两次查询

不用等扫描器跑完整站。SSH 登进去做下面几步,通常能把范围缩到一个目录。所有命令都是只读的。

01

按时间筛出可疑文件

find . -type f -name "*.php" -newermt "2026-10-01" -not -path "./wp-content/cache/*" | head -50。日期换成你怀疑的时间点,逐个看是不是那次更新造成的。

02

搜高危函数

grep -rn "eval(" --include="*.php" wp-content/ | head -30,再补一条查 base64_decode。正版主题里出现这两类调用基本可判定,误报主要来自老式加密插件。

03

用官方校验和比对核心

wp core verify-checksums,会列出所有被改动的核心文件,输出形如 File doesn't verify against checksum: wp-includes/pluggable.php。版本必须与当前一致,否则整站都会报不一致。

04

查库里的两处痕迹

用户侧关联 wp_usermeta 里 wp_capabilities 含 administrator 的记录;任务侧看 cron 那一行。两处都要人眼过一遍,不能只看 count。

日志里还有另一类证据:几万次 POST /wp-login.php 说明是暴力破解,大量 /wp-json/wp/v2/users 请求说明账号被枚举。这类线索决定加固方向,分析见WordPress 防火墙与 WAF 配置。

CLEANUP SEQUENCE

清理的四步顺序
顺序错了会丢掉判断依据

很多人第一步就删文件,删完发现不知道入侵是什么时候进来的、哪些备份已被污染。正确做法是先留证据,再动手。

01

隔离并取证

整站打包、数据库导出,两份都存到站点目录之外。记下最早异常文件的修改时间,这个时间点决定哪份备份还能用。前台切维护模式,SSH 与数据库保留可用。

02

换掉全部凭据

顺序从外到内:域名注册邮箱、主机面板、SSH、FTP/SFTP、数据库用户密码、WordPress 管理员密码。只换 WordPress 密码等于没换,攻击者往往还有一层系统入口。

03

覆盖核心与插件

删掉 wp-admin 与 wp-includes,从同版本官方包重新解压。wp-content 保留,themes 与 plugins 只留正在用的,其余全删,在用的也从官方源重新下载覆盖。

04

清库并重建密钥

删陌生用户、清 wp_usermeta 越权项、清 cron 陌生钩子、删寄生文章、查 autoload 为 yes 的可疑项。最后重建 8 个安全密钥,让所有已登录会话立即失效。

覆盖核心前先看 wp-includes/version.php 确认版本,下载对应完整包;跨大版本覆盖会触发数据库升级提示。

KEYS & HARDENING

清理后必须重建的密钥
不改这一项,等于留了后门

WordPress 用 wp-config.php 里的 8 个密钥签名登录 Cookie。这组值不变,攻击者之前窃取的 Cookie 依然有效,改多少次密码都没用,这一步最容易被跳过。

A

8 个常量整组替换

AUTH_KEY、SECURE_AUTH_KEY、LOGGED_IN_KEY、NONCE_KEY 与对应的 4 个 SALT。整组从官方密钥生成页取一份新的,一次性替换,不要只改其中几个。替换后所有用户被强制退出。

B

顺手加的三条常量

define('DISALLOW_FILE_EDIT', true) 关掉后台文件编辑器,堵住拿到后台后直接写马的路;WP_DEBUG_DISPLAY 设 false,避免报错暴露绝对路径;FORCE_SSL_ADMIN 让后台强制走 HTTPS。

C

权限收回 644 / 755

目录 755、文件 644、wp-config.php 收到 600。上传目录禁止执行 PHP:Apache 用 .htaccess 写 php_flag engine off,Nginx 在 uploads 的 location 里 return 403。这一步能废掉大部分上传型木马。

HARDENING MATRIX

加固项与代价对照
每一项都有副作用

加固不是全开就好。下面几项在企业站上最常见,风险一列是实际踩过的坑。

加固项 做法 挡住什么 注意的风险
登录二次验证 安全插件开启 TOTP,管理员强制 密码泄露后的登录 换手机未备份恢复码会锁死账号
禁用文件编辑 DISALLOW_FILE_EDIT 置 true 后台直接写马 日常改主题需走 SFTP
上传目录禁执行 Nginx 拦截或 .htaccess 关闭引擎 图片马、双扩展名 少数上传类插件会报错
关闭 xmlrpc 返回 403 或插件禁用 暴力破解与 pingback 放大 旧版手机客户端无法发文
数据库用户降权 去掉 DROP、FILE、GRANT 注入后删库或读文件 个别迁移插件需临时提权

FAQ

被黑处置常见五问

用一份干净的备份回滚,能不能省掉清理?

只有备份早于入侵时间点才成立。入侵往往潜伏数周,最近几份备份里已经带了后门,回滚等于把马一起搬回来。先看最早异常文件的修改时间,找一份早于它的备份,恢复后仍要改全部密码、重建密钥。备份本身的制度见备份与恢复。

清完之后怎么确认真的干净了?

三个动作:核心校验和全部通过;uploads 下不存在任何 PHP 文件;观察 14 天,每天比对一次文件哈希。同时看日志里是否还有对可疑路径的请求,有请求说明攻击者还在试。

为什么改了后台密码,过几天又被植入?

入口大概率不在 WordPress:SSH 密码与后台密码相同、FTP 账号长期未改、面板被撞库,或者同服务器上另一个站被拿下后横向移动。只处理这一层,清理就白做了。

主机商说我的站在发垃圾邮件,从哪里查?

先看邮件队列与发送日志,确认是 PHP 发信还是系统服务。PHP 发信多半是木马调用 wp_mail(),用 grep -rn "wp_mail(" 找。处理完把发信改为第三方 SMTP,切断本地通道。

被黑过的站,SEO 要多久恢复?

清理干净后先在 Search Console 提交复核,通常一到三周解除标记。排名恢复取决于寄生页面存在了多久,超过三个月的按季度算。期间保持正常更新即可。长期方案见WordPress 安全加固与木马清理与WordPress 安全插件。

EMERGENCY RESPONSE

站点正在被挂马或已被搜索引擎标记
先做只读体检,再决定动不动手

提供主机面板与 SSH 入口,我们先做一轮只读排查:核心校验和、可疑文件清单、cron 与用户表异常项、日志里的攻击来源,出一份处置建议再动手。清理与加固可单独做,也可并入年度维护,HTTPS 侧的配置见SSL 证书与 HTTPS 配置。

电话/微信 13280692153 邮箱 web@wordpressx.com 地址 山东省淄博市张店区电子产业创新园 B 座

INDUSTRIAL BELT

扎根中国制造产业带
懂工厂,才懂出海

从胶东半岛到珠三角,从长三角到中原腹地,每一片产业集群都有自己的出口节奏与买家画像。信科网络长期扎根产业一线,把工厂的产品语言翻译成海外采购商听得懂的搜索语言,让每一分投入都对着真实的询盘去。

shapotou

沙坡头外贸网站建设

沙坡头:国家AAAAA级旅游景区,国家级沙漠生态自然保护区,全球环保500佳单位,全民健身二十个著名景观,科技进步特别奖。沙坡头位于宁夏回族自治区中卫市城区西部腾格里沙漠的东南缘。东起二…

yunyang

云阳外贸网站建设

云阳县地处东经108°24′-109°14′,北纬30°34′-31°27′。位于重庆市东北部,长江三峡工程库区腹心地带。东与奉节县相连,西与万州区相接,南与湖北省利川市相邻,北与开县、巫溪县为界。县境东…

dadukou

大渡口外贸建站

大渡口区是重庆主城区,重庆大都市区之一,地处重庆市西南部,是重庆都市圈重要组成部分,也是重庆市中心城区十二个组团之一,于1965年建区。大渡口区东临巴南区,南界江津区,西、北靠九龙坡…

tongnan

潼南外贸建站

潼南县位于重庆市西北部最前沿。是川渝握手区腹地东西南北交通自然便捷走向的交汇点及区域几何中心,是成渝经济区的腹地中心,是重庆西部凸入川中腹地最远、毗邻四川县市最多的对外开放最前沿…

xiushan

秀山WordPress建站

秀山土家族苗族自治县,位于重庆市东南部,武陵山脉中段,四川盆地东南缘的外侧,为川东南重门户。与湖南省、湖北省、贵州省毗邻,326国道和319国道贯穿全县。距长沙604公里、武汉656里、贵阳5…

kaizhou

开州WordPress建站

开州区隶属于重庆市,位于重庆市东北部,三峡库区小江支流回水末端,介于北纬30°49′30″-31°41′30″、东经107°55′48″-108°54′之间,西邻四川省开江县,北依大巴山接城口县和四川省宣汉县,东毗云…

taocheng

桃城Shopify建站

桃城区,隶属于河北省衡水市,位于河北省东南部。1996年7月,设立桃城区。桃城区面积为591平方公里。桃城区属大陆季风气候区,为温暖半干旱型。年平均年日照时数为2642.8小时,年蒸发量在1295.…

xiongxian

雄县Shopify建站

河北省保定市雄县位于东经116°06',北纬38°59'。平均海拔10米。处于冀中平原的京、津、保三角腹地,南倚“华北明珠”白洋淀,北靠“京南小香港”___白…

huanghua

黄骅外贸推广

概况:黄骅市位于北纬38°09′-38°39’,东经117°05′-117°49’之间。处于“环渤海、环京津”的“双环”枢纽地带和东北来经济圈的中心位置,是国家跨世纪工程–神华工程的…

youyang

酉阳外贸推广

酉阳土家族苗族自治县地处渝东南边陲的武陵山区,渝、鄂、湘、黔四省(市)在此接壤,是渝东南重要门户。全县面积5173平方公里,是重庆市面积最大的县,辖39个乡镇,人口73万,其中土家族44.5…

fengdou

丰都Google SEO

丰都县位于重庆市版图中心,东经107°28′03″-108°12′37″,北纬29°33′18″-30°16′25″之间,呈西北—东南走向分布,南北长87km,东西宽54km,幅员面积2901km2。长江横穿县境47km,水上距离重庆主…

shapingba

沙坪坝Google SEO

沙坪坝区,隶属重庆市,是重庆主城区,重庆大都市区。位于重庆市西南部,东滨嘉陵江与江北区、渝北区相邻,东南与渝中区接壤,东北与北碚区相连,南与九龙坡区相靠,西抵缙云山接璧山区,紧邻…

anxin

安新GEO优化

安新县位于河北省中部,县境东与雄县、任丘相连;南与高阳接壤;西与清苑、徐水交界;北与容城毗邻。总面积738.6平方公里。县人民政府所在地安新镇是安新县政治、经济、文化和交通中心,北距…

guyuan

固原GEO优化

固原地区位于宁夏回族自治区南部,东西南三面与甘肃毗邻,北部与本区中卫、同心两县接壤,总面积16783平方公里,辖固原、海原、西吉、隆德、彭阳、泾源县,总人口186.85万人,其中回族占47.6%,…

wanzhou

万州谷歌SEM

重庆市万州区地处三峡库区腹心,长江中上游结合部,因“万川毕汇、万商云集”而得名,是长江十大港口之一。全区幅员面积3457平方公里,辖52个镇乡、街道。总人口171.7万,在重庆40个区县中人口最…

wuyi

武邑谷歌SEM

武邑县位于河北省中南部。总面积830.1平方千米。总人口31万人(2004年)。武邑县位于华北平原的河北省中南部,所辖6镇3乡,545个行政村。据第五次人口普查统计,总人口31.95万人,其中汉族3194…

yanchi

盐池Facebook广告

山西省运城市即古河东盐池,亦称解池。地处运城盆地之南,中条山北麓,自东北向西南延伸,长约30公里,宽3——5公里,面积130平方公里,是由鸭子池、盐池、硝池等几个部分组成,湖面海拔324.5米…

zhongwei

中卫Facebook广告

中卫地处黄河前套之首,位于宁夏回族自治区中西部、宁、甘、内蒙古三省区交界点上,辖中宁、海原两县和中卫城区,总面积16986.1平方公里,其中川区面积3681.1平方公里,占21.67%,山区面积1330…

pengyang

彭阳Yandex推广

彭阳县位于宁夏回族自治区,位于宁夏回族自治区南部边缘,六盘山东麓,介于东经106°32′-106°58’之间,北纬35°4l’-36°17’。西连宁夏固原市原州区,东、南、北环临甘肃…

chengkou

城口Yandex推广

城口县位于重庆市东北边缘,地处四川省、陕西省、重庆市三省(市)交界处,地理坐标为东经108°15′—109°16′、北纬31°37′—32°12′。县境东北与陕西省镇坪县、平利县、岚皋县、紫阳县接壤;南与重…

yinchuan

银川TikTok推广

银川市地处祖国西北边陲,是宁夏回族自治区首府,也是全国历史文化名城之一。银川市是一个多民族聚居区,共有汉、回、满、蒙、朝鲜等26个民族。银川市位于东经105°51’,北纬38°25’。东临黄河,…

为什么一定要选懂产业带的出海服务商?建材丝网的欧洲建筑商看资质与交期,工业橡塑的中东工程商问耐温与工况,毛皮服饰的俄罗斯分销商算的是季节与毛利。买家不同,决策逻辑就不同;信科网络把这些差异拆进网站结构、关键词地图和投放策略里,用他们习惯的方式出现在他们搜索的地方。