用户登录
个人主页 用户中心 我的订单 添加授权 管理授权
退出登录
用户登录 用户注册
欢迎来到 UC建站系统

网站被挂了300条菠菜外链,手动删了一个星期还没删干净,第三天又冒出来100多条:宝塔面板批量搜索替换只用了3分钟,但如果你不查后门不扫木马不改密码,删一万次也没用

去年11月一个客户的网站出问题了。他说最近流量掉得很奇怪,百度收录一直在降,Google Search Console里突然冒出来一堆"安全问题"提示。我打开网站,表面看一切正常——首页、产品页、文章页,该有的都有。但右键查看网页源代码,翻到最底部,在 `` 标签之前,藏了密密麻麻一大段代码:`display:none` 包裹着300多条菠菜网站的链接,每个链接后面还跟了不同的锚文本,从"澳门赌场"到"六合彩投注"到"色情直播"一应俱全。这300多条隐藏外链分布在87个页面的底部,全部藏在 `div style="display:none;position:absolute;left:-9999px"` 里。普通人浏览网站完全看不到,但搜索引擎的爬虫能读到。我当时做了最蠢的一件事:逐个打开这87个页面,手动删除那些隐藏链接。花了整整四天,删到手酸,确认每个页面都干净了。结果第三天再查,同样的位置又冒出来100多条新的。黑客根本没走,他留的后门还在服务器上,删完了他能重新写回来。这件事之后我才搞明白:外挂链接的问题不是"怎么删",而是"删完怎么让它不再长出来"。

外挂链接清理的正确流程:查、删、杀、堵

步骤做什么工具/方法不做的后果
1. 全站备份备份源码+数据库+日志,留存证据宝塔备份 / mysqldump / tar误删后无法恢复,攻击痕迹丢失
2. 批量检测找出所有被感染的页面和隐藏链接grep / 宝塔搜索 / D盾 / 在线检测漏掉的文件会反复触发问题
3. 批量删除一次性清除所有页面中的外挂链接宝塔批量替换 / sed / SQL替换手动逐条删除效率极低且容易遗漏
4. 查杀后门找出webshell、木马、恶意脚本D盾 / 安全狗 / Wordfence / 河马查杀删完黑链很快又长出来
5. 改密码修改所有账户密码(16位以上复杂密码)黑客仍然有权限随时登录
6. 加固防护安装WAF、修复漏洞、设置权限宝塔防火墙 / Cloudflare / 文件权限换个方式又攻进来了

一、先搞清楚:外挂链接是怎么进来的,藏在哪

知道攻击手法,才能对症下药。外挂链接的植入方式主要有四种:

方式一:注入模板/页面文件

最常见的方式。黑客通过漏洞拿到文件写入权限后,直接在网站的模板文件(header.php、footer.php、index.php)或页面内容中插入 `display:none` 隐藏链接。这是80%以上外挂链接的藏身方式。

典型特征:链接被 `position:absolute;left:-9999px` 或 `opacity:0` 包裹

方式二:写入数据库

黑客直接往数据库的文章表、评论表、或选项表(如WordPress的wp_options)中插入恶意链接。这种方式的隐蔽性更高,因为你在源文件里找不到任何痕迹。

典型特征:链接藏在 `wp_posts.post_content` 或 `wp_options.option_value` 中

方式三:.htaccess劫持

在.htaccess文件中插入重定向规则,让搜索引擎爬虫看到的内容和普通用户看到的内容不同(Cloaking)。用户正常访问,爬虫看到的是满屏的外挂链接。

典型特征:.htaccess中有针对User-Agent的RewriteRule

方式四:上传目录藏webshell

黑客在uploads等可写目录中上传了webshell后门文件(通常伪装成图片或缓存文件),这个后门文件可以随时执行命令、重新写入外挂链接。

典型特征:upload目录中出现.php文件,或伪装成.jpg的PHP脚本

二、批量检测:怎么找出所有被挂的链接

在动手删除之前,必须先知道外挂链接到底藏在哪些文件、哪些数据库表里。

方法一:宝塔面板搜索(最简单,推荐新手)

  1. 登录宝塔面板,进入"文件"管理
  2. 选择网站根目录(通常是 `/www/wwwroot/你的域名/`)
  3. 点击右上角"搜索",输入可疑特征关键词
  4. 勾选"搜索子目录"和"包含文件内容"
  5. 所有包含该关键词的文件会被列出,点击直接编辑

搜索关键词清单(按优先级从高到低):
1. 具体的恶意域名(如果你已经从源代码中找到了)
2. `display:none` 或 `display: none`——隐藏链接最常用的CSS
3. `left:-9999` 或 `left: -9999`——把链接移到屏幕外
4. `visibility:hidden`——另一种隐藏方式
5. `position:absolute`——配合left:-9999使用
6. `opacity: 0` 或 `opacity:0`——透明隐藏

1 - 网站被挂了300条菠菜外链,手动删了一个星期还没删干净,第三天又冒出来100多条:宝塔面板批量搜索替换只用了3分钟,但如果你不查后门不扫木马不改密码,删一万次也没用 - UC建站系统

方法二:SSH命令行 grep(效率最高,适合技术用户)

如果你会SSH登录服务器,grep是最快的方法:
# 搜索包含恶意域名的所有PHP/HTML/JS文件
grep -rn "bad-domain.com" /www/wwwroot/yoursite/ \
  --include="*.php" --include="*.html" --include="*.js" --include="*.htm"

# 搜索所有包含 display:none 隐藏代码的文件
grep -rn "display: *none" /www/wwwroot/yoursite/ \
  --include="*.php" --include="*.html"

# 搜索屏幕外隐藏链接(left:-9999)
grep -rn "left: *-9[0-9]\{3\}" /www/wwwroot/yoursite/ \
  --include="*.php" --include="*.html"

# 统计每个文件包含多少处匹配(按文件分组计数)
grep -rc "bad-domain.com" /www/wwwroot/yoursite/ \
  --include="*.php" | grep -v ":0$" | sort -t: -k2 -rn

方法三:在线工具和专用扫描器

工具类型费用核心功能
因尔特外链检测在线工具免费输入URL,自动抓取全站所有外链并标注来源
Libra(天秤座)开源平台免费开源网站篡改、黑链、后门、死链全维度自动化检测
Sucuri SiteCheck在线扫描免费全球知名安全扫描,检测恶意代码和黑链
WordfenceWordPress插件免费版可用WordPress专用,全站扫描+防火墙+恶意代码检测
D盾Windows桌面软件免费国内知名webshell查杀工具,检测PHP/ASP后门

三、批量删除:3分钟清完300条外挂链接

宝塔面板批量替换(最简单)

宝塔面板的文件管理器中内置了"批量替换"功能:搜索到包含恶意代码的文件后,在搜索框右侧有"替换"选项,输入要替换的内容→替换为空→一键全部替换。如果外挂链接的形式比较统一(比如都是同一个域名),这个操作3分钟内就能搞定。

SSH sed 命令批量删除(最灵活)

三种批量删除命令,按场景选用

场景命令风险
只删除恶意域名,保留正常内容grep -rl "bad-domain.com" /www/wwwroot/yoursite/ | xargs sed -i 's|bad-domain.com||g'
删除整行(确认整行都是恶意代码)grep -rl "bad-domain.com" /www/wwwroot/yoursite/ | xargs sed -i '/bad-domain.com/d'
删除包含 `display:none` 的整个HTML块grep -rl "display: *none" /www/wwwroot/yoursite/ | xargs sed -i '/display: *none/,/<\/div>/d'

⚠️ 重要:在执行任何批量删除命令之前,先运行一次不带 `-i` 参数的 grep,确认匹配到的内容确实是你想删的。`-i` 是直接修改文件,不可撤销。建议先备份,再操作。

清理数据库中的外挂链接

文件清理完了还不够,数据库里可能也藏着。尤其是WordPress站点,黑客经常往文章内容表或选项表中写入恶意链接。
-- 清理文章内容中的恶意链接
UPDATE wp_posts SET post_content =
  REPLACE(post_content, 'bad-domain.com', '');

-- 清理选项表中的恶意链接
UPDATE wp_options SET option_value =
  REPLACE(option_value, 'bad-domain.com', '');

-- 先查询确认受影响的行数,再执行替换
SELECT COUNT(*) FROM wp_posts
  WHERE post_content LIKE '%bad-domain.com%';

四、查杀后门:不杀后门,删一万次也没用

只删黑链不清后门,是所有新手都会犯的错误。黑客留在服务器上的webshell就像一把备用钥匙,你换了锁(删了黑链),他拿钥匙还能再开。

webshell常见的藏身位置

位置典型文件名为什么藏这里
上传目录wp-content/uploads/2024/01/1.php
images/logo.php
uploads目录有写入和执行权限
主题/插件目录themes/xxx/admin.php
plugins/xxx/system.php
混在正常文件里难以发现
缓存目录wp-content/cache/xxx.php
runtime/cache/xxx.php
缓存目录通常不在安全扫描范围
系统临时目录/tmp/sess_xxx
/var/tmp/.hidden.php
完全不在网站目录内,更难发现
伪装成正常文件wp-config-sample.php
index.php.bak
看起来像备份或默认文件,管理员不敢删

推荐的查杀工具

D盾

国内最常用的webshell查杀工具,Windows客户端。下载到本地后,指定网站目录路径,自动扫描所有文件。能检测PHP、ASP、ASP.NET等多种webshell,特征库持续更新。

免费 | Windows桌面端 | 国内使用最广

Wordfence(WordPress)

WordPress最全面的安全插件,免费版就包含全站恶意代码扫描功能。它会逐文件比对WordPress官方源文件,任何被修改或新增的文件都能检测出来。

2 - 网站被挂了300条菠菜外链,手动删了一个星期还没删干净,第三天又冒出来100多条:宝塔面板批量搜索替换只用了3分钟,但如果你不查后门不扫木马不改密码,删一万次也没用 - UC建站系统

免费版可用 | WordPress插件 | 自动对比官方源

河马查杀

云端查杀引擎,支持上传文件扫描或在线检测。对PHP webshell的检出率很高,能识别经过混淆和加密的后门代码。适合不想安装软件的场景。

免费 | 在线+本地版 | 云端特征库更新快

手动排查:找异常文件

查杀工具不是100%的,配合手动排查更保险:

找最近修改过的PHP文件:`find /www/wwwroot/yoursite/ -name "*.php" -mtime -7`——列出7天内修改过的所有PHP文件。网站正常运行期间不应该有大量PHP文件被修改,任何出现在这个列表里的异常文件都值得检查。

3 - 网站被挂了300条菠菜外链,手动删了一个星期还没删干净,第三天又冒出来100多条:宝塔面板批量搜索替换只用了3分钟,但如果你不查后门不扫木马不改密码,删一万次也没用 - UC建站系统

找可疑函数调用:`grep -rn "eval\|base64_decode\|shell_exec\|system\|passthru\|assert" /www/wwwroot/yoursite/ --include="*.php"`——这些函数是webshell最常用的执行入口,正常代码很少同时出现多个。

检查计划任务:`crontab -l`——黑客经常设置定时任务,让后门定期执行、重新写入黑链。发现可疑的定时任务立即删除。

五、改密码 + 修权限:堵上入侵通道

清理完代码和后门之后,还有两件事必须做:

必须修改的密码清单

密码类型要求说明
网站后台管理员16位以上,大小写+数字+符号黑客可能已获取后台密码
数据库密码16位以上随机字符串改完同步更新wp-config.php等配置文件
FTP/SFTP密码新密码,不与其他密码重复黑客可能通过FTP上传后门
SSH/服务器密码最复杂,绝不重复这是最后一道防线
宝塔面板密码16位以上,修改默认端口面板被入侵是最常见的攻击入口

修复文件权限

# 目录权限设为755(所有者可写,其他人只读)
find /www/wwwroot/yoursite/ -type d -exec chmod 755 {} \;

# 文件权限设为644(所有者可写,其他人只读)
find /www/wwwroot/yoursite/ -type f -exec chmod 644 {} \;

# 关键配置文件设为400(只有所有者可读)
chmod 400 /www/wwwroot/yoursite/wp-config.php

# 禁止上传目录执行PHP脚本(关键!)
# 在wp-content/uploads/下创建.htaccess:
echo "<FilesMatch \\.php$>" > /www/wwwroot/yoursite/wp-content/uploads/.htaccess
echo " Deny from all" >> /www/wwwroot/yoursite/wp-content/uploads/.htaccess
echo "</FilesMatch>" >> /www/wwwroot/yoursite/wp-content/uploads/.htaccess

六、长期防护:让外挂链接不再出现

防护措施具体操作效果
安装WAF防火墙宝塔防火墙 / Cloudflare WAF / Wordfence拦截SQL注入、XSS、文件上传等攻击
隐藏服务器真实IP接入Cloudflare CDN或国内CDN防止黑客绕过CDN直接攻击源站
定期备份宝塔自动备份 / 手动mysqldump + tar出事了有干净版本可以回滚
更新程序和插件WordPress/主题/插件保持最新版修补已知漏洞,减少攻击面
删除无用插件/主题停用并删除不用的插件和主题废弃插件是常见攻击入口
关闭目录浏览Nginx: autoindex off; Apache: Options -Indexes防止黑客浏览目录结构
修改默认后台地址WordPress: 插件改 /wp-admin 路径减少暴力破解和漏洞扫描

七、最易犯的四个错误,90%反复被挂链都是因为它们

❌ 只删黑链不查后门

这是反复被挂链的头号原因。黑链只是症状,webshell后门才是病根。删完黑链不查杀后门,等于给黑客留了一把备用钥匙。

❌ 不改密码

黑客可能已经拿到了你的后台密码或FTP密码。清理完代码不改密码,他随时可以用正常凭证登录,重新植入后门。

❌ 用破解主题/插件

网上免费的"破解版"主题和插件,绝大多数都内置了后门。下载的时候省了几百块,清黑链的时候花几千。这不是节省,是分期付款。

❌ 只清理文件不清理数据库

外挂链接可能同时存在于文件和数据库中。文件清干净了,数据库里的恶意代码还在,页面渲染出来照样有黑链。

最后

网站被挂外挂链接,本质上是一个"查→删→杀→堵"的四步流程,大多数人卡在第二步就停了——删完黑链觉得大功告成,结果过两天又冒出来。正确的处理顺序是:先全站备份留后路,再批量检测定位问题,然后批量删除黑链,接着用D盾/Wordfence查杀后门,最后改密码修权限堵漏洞。这个流程走完一遍,反复被挂链的概率能降低90%以上。另外说一句:别用破解版的插件和主题,别用弱密码,别把后台地址放在默认路径。这三条做到了,大部分外挂链接根本没有机会进你的网站。
紧急处理清单(收藏备用):
· 检测:grep -rn "display:none" 网站目录 → 找隐藏链接
· 删除:宝塔批量替换sed -i → 一键清理
· 查杀:D盾 / Wordfence / 河马查杀 → 清后门
· 数据库:SQL REPLACE → 清数据库中的黑链
· 权限:chmod 755/644 → 限制写入
· 禁止uploads执行PHP → .htaccess Deny
· 密码:全部改成16位以上复杂密码

相关推荐
在线客服
👇找客服拿折扣
QQ咨询&售后
在线时间
11:00 ~ 5:30
QQ:3155555535
👇联系QQ
👇联系WX
首页 程序 帮助 登录