10个站里3个被挂了赌博和色情外链自己完全不知道,站长工具查了三个月才发现,排查黑链不能只靠肉眼翻源码
上个月一个朋友的站,百度收录突然从1200条掉到300条,排名全面下滑,查了半天没找到原因——网站看着正常、内容没改过、也没被攻击的记录。最后在服务器上用grep扫了一遍所有HTML和PHP文件,发现footer.php里被插了一行<div style="display:none">,里面塞了40多条赌博和色情网站的外链。前台完全看不见,搜索引擎爬虫可是读得清清楚楚。网站被挂黑链这件事,最可怕的地方就是你不知道——等你知道了,排名和收录已经烂了几个月了。
黑链的四种伪装方式,肉眼检查90%会漏掉
| 1 | CSS隐藏型——display:none、visibility:hidden、opacity:0、字体颜色与背景同色、绝对定位移出可视区域 |
| 2 | JS动态插入型——页面加载后用JavaScript动态写入链接,查看源代码看不到,必须用浏览器开发者工具 |
| 3 | 搜索引擎判断型——通过User-Agent判断来访者是搜索引擎爬虫还是真人,只对爬虫展示黑链 |
| 4 | 文件嵌套型——黑链代码不在主题文件里,藏在被包含的PHP文件、加密后的代码段、图片EXIF信息甚至数据库中 |
一、黑链到底藏在哪里?翻源码查不到的五种位置
很多人排查黑链的方法就是打开网页、右键"查看源代码"、Ctrl+F搜外链域名。这个方法只能查出最简单的明文黑链——直接写在HTML里的那种。但现在挂黑链的手段早就升级了,五种隐藏位置对应五种排查方法。
| 黑链藏身位置 | 技术实现方式 | 为什么肉眼查不到 | 怎么查 |
|---|---|---|---|
| 主题模板文件 | 在footer.php、header.php、functions.php中插入隐藏链接代码 | CSS隐藏或JS动态渲染,浏览器渲染后不可见 | SSH登录服务器,grep搜关键词扫描所有.php文件 |
| 数据库 | 在wp_posts、wp_options或自定义表中插入包含黑链的HTML片段 | 链接内容在数据库里,文件系统扫不到 | 导出数据库SQL文件,用文本搜索工具查找可疑域名 |
| 插件/扩展 | 在已安装的插件代码中插入后门,或上传伪装成正常插件的恶意插件 | 插件目录文件多,逐个检查不现实 | 对比插件原始版本的文件哈希值,或扫描最近修改的文件 |
| .htaccess / Nginx配置 | 通过服务器配置文件做URL重定向或条件注入,对特定User-Agent返回黑链内容 | 配置文件不是HTML,正常访问网站看不到 | 检查.htaccess和nginx.conf中异常的RewriteRule或if条件块 |
| 上传目录 | 在uploads、wp-content/uploads等可写目录中放置.php伪装成.jpg的文件 | 文件伪装成图片,文件名看起来正常 | 扫描上传目录中所有非图片扩展名的文件,以及伪装文件头 |
这五种位置排查一遍,手工操作至少需要半天。如果手里有10个站、20个站,每个站都这样排查一遍,工作量是指数级增长的。这就是为什么需要批量检测工具。
二、批量检测黑链的五种工具方案,从免费到付费按需选
市面上能检测黑链的工具分五类,每类适合的场景和人群不同。

站长工具类(免费,适合少量站点)
百度搜索资源平台的"网站体检"功能、360网站安全检测、Chinaz站长工具的"死链/外链检测"。这类工具操作简单,输入域名就能出报告,但一次只能查一个站,不支持批量。适合手里只有1-3个站的个人站长。百度搜索资源平台还会主动推送安全告警——如果百度爬虫抓到了你的站上有异常外链,会在后台通知你。
开源Python脚本(免费,适合有技术基础的人)
GitHub上有几个开源项目专门做暗链检测:aljcscan(基于爬虫+关键字匹配)、Libra天秤座(网站篡改/暗链/后门综合检测)、dc_find(批量暗链检测)。这些工具的原理是爬取网页→解析HTML→匹配黑链特征(隐藏CSS属性、可疑外链域名、关键字词库)。可以自己部署在服务器上,配置定时任务自动扫描。
服务器端命令行(免费,最彻底)
SSH登录服务器,用grep/find组合命令直接扫描文件系统。这是最彻底的方案——不依赖网页渲染,直接扫源码文件。后面会给出完整的命令示例。缺点是每次都要手动操作,不适合高频监控。
商业安全监测平台(付费,适合企业级)
阿里云Web应用防火墙(WAF)、腾讯云网站管家、知道创宇加速乐等。提供7×24小时自动监测,不仅能检测黑链,还能检测挂马、篡改、漏洞。按年付费,一个站几百到几千不等。适合企业官网、电商站等对安全要求高的场景。
搜索引擎Site语法(免费,辅助排查)
在百度搜索 site:你的域名 赌博 或 site:你的域名 博彩,看搜索引擎收录了你网站的哪些页面中包含了这些敏感词。这不是检测工具,但能帮你快速发现已经被搜索引擎抓取到的黑链页面。配合百度搜索资源平台的"索引量"功能一起用。
如果手里站点数量不超过5个,站长工具+服务器grep扫描就够用。如果超过10个站点,建议搭一套开源脚本做定时自动扫描,或者接入商业安全平台统一管理。
三、服务器端批量扫描命令,复制粘贴就能用
技术能力够的话,SSH登录服务器直接扫文件是最快最准的方案。以下是几个可以直接用的命令。

# 扫描display:none和visibility:hidden(最常见的黑链隐藏方式)grep -rn "display\s*:\s*none" /var/www/html/ --include="*.php" --include="*.html"# 扫描绝对定位移出屏幕(left:-9999px等)grep -rn "left\s*:\s*-[0-9]\{4\}px" /var/www/html/ --include="*.php"# 扫描字体颜色与背景同色(color和background-color值相同)grep -rn "color\s*:\s*#fff" /var/www/html/ --include="*.php" | grep "background.*#fff"# 扫描常见黑链关键词(赌博、色情、私服等)grep -rniE "(赌场|博彩|百家乐|色情|成人|私服|代孕|迷药|枪|假币)" /var/www/html/ --include="*.php" --include="*.html"# 扫描外链格式(href="http://),排除你自己的域名grep -rn 'href="http' /var/www/html/ --include="*.php" | grep -v "yourdomain.com"# 扫描eval和base64_decode(加密执行的恶意代码常见特征)grep -rn "eval\s*(" /var/www/html/ --include="*.php"grep -rn "base64_decode" /var/www/html/ --include="*.php"# 查找最近7天内修改的PHP文件(黑链通常是通过后门修改的现有文件)find /var/www/html/ -name "*.php" -mtime -7 -ls# 查找上传目录中非图片文件find /var/www/html/wp-content/uploads/ -type f ! \( -name "*.jpg" -o -name "*.png" -o -name "*.gif" -o -name "*.webp" -o -name "*.pdf" \) -ls这三个步骤跑下来,95%的黑链都能被扫出来。剩下的5%是高级伪装——比如黑链代码被base64编码后藏在数据库里,或者通过WebSocket动态加载。这些需要更专业的工具才能检测。
重要提醒:扫描结果里出现"display:none"不代表一定是黑链,很多正常的前端交互也会用到display:none(如折叠菜单、Tab切换、弹窗)。人工判断的依据是:display:none的代码块里是否包含<a href>外链标签,以及这些外链指向的域名是否与网站内容相关。不相关+隐藏=黑链,相关+隐藏(比如移动端菜单)=正常。
四、黑链对SEO的杀伤力,比你想象的严重得多
很多站长觉得"不就是几个隐藏链接嘛,删了就完了"。但实际上黑链被搜索引擎发现之后的连锁反应,删除代码只是第一步。
五、发现黑链后的完整清理流程,不是删了代码就完事了
发现黑链后的处理顺序很重要。很多人上来就删代码,结果黑客通过后门又写回去了。正确的顺序是:隔离→排查入口→清理→修复→验证。
| 1 | 隔离 | 先把网站设为维护模式,或者临时关闭写入权限(chmod 555整个目录)。防止在排查期间黑客继续操作。 |
| 2 | 查入侵入口 | 检查服务器登录日志(/var/log/auth.log或/var/log/secure),看有没有异常IP的SSH/FTP登录记录。检查WordPress后台的"用户"列表,有没有你不认识的管理员账号。 |
| 3 | 清理黑链代码 | 根据扫描结果逐条清理。不是简单删除,要保留修改记录。用备份文件和当前文件做diff对比,确认改了什么。 |
| 4 | 堵漏洞 | 修改所有密码(SSH、FTP、数据库、WordPress后台),更新WordPress核心+主题+插件到最新版,删除不用的插件和主题,配置文件权限(目录755、文件644、wp-config.php设440),关闭不用的端口。 |
| 5 | 验证+申诉 | 再次扫描确认黑链已全部清除。到百度搜索资源平台提交"网站改版/清理"说明,申请重新抓取和审核。到Google Search Console提交Security Issues复查请求。监控收录量恢复情况。 |
如果是WordPress站点,还有一个容易被忽略的检查点:wp-content/themes/目录下有没有不属于当前主题的文件夹,wp-content/plugins/里有没有你不认识的插件。黑客经常利用已废弃的旧主题或伪装插件作为后门入口。
六、预防黑链的六个日常习惯,比任何检测工具都好用
检测和清理是治标,预防才是治本。下面六个习惯不需要额外花钱买安全产品,但能挡住90%的黑链入侵。
WordPress核心、主题、插件,有更新就更新。60%的网站入侵是通过已知漏洞进来的——漏洞已经公开了、补丁也有了,但站长没更新。WordPress 5.6之前版本的REST API漏洞,到2026年还有人在用没打补丁的版本。

不用的主题删掉,不用的插件删掉,不用了的老版本备份文件删掉。每一个留在服务器上但不维护的代码文件,都是一个潜在的攻击入口。尤其是wp-config.php.bak、database.sql这类备份文件。
文件权限严格设:目录755、文件644、wp-config.php设440或400。上传目录不允许执行PHP。数据库用户只给必要的权限,不给GRANT ALL。SSH禁用root直接登录,用普通用户+sudo。
每天自动备份网站文件和数据库,备份保留至少30天。黑链清不干净的时候,回滚到被入侵之前的备份是最快的恢复方式。用crontab定时执行备份脚本,存到远程位置。
用Tripwire、AIDE或简单的md5sum脚本,每天检查核心文件是否被修改。WordPress核心文件的哈希值是不变的,任何一个变了就是异常。很多安全插件(如Wordfence)自带这个功能。
百度搜索资源平台会推送安全告警——当百度爬虫检测到你的网站有异常外链、被篡改、包含违规内容时,会在后台消息中心通知你。这是免费的,比任何付费监控都及时,因为搜索引擎的爬虫频率远高于任何第三方工具。
做站群或者多个网站的人,在安全维护上有一个额外的难点:站点多了,每个站都要检查有没有被挂黑链,手工操作根本顾不过来。UC建站这类平台在这一块的优势是每个站独立部署(独立IP、独立目录),配合百度API实时推送收录状态——如果某个站被黑挂了黑链,百度爬虫抓取后会通过API反馈异常收录数据,管理后台的看板能一眼看到哪个站出了问题。比手动登10个百度站长平台查安全告警高效得多。
黑链检测这件事,说穿了不是"有没有工具"的问题,是"有没有养成检查习惯"的问题。每半个月用grep扫一遍文件、每周看一眼百度搜索资源平台的安全告警、每月检查一次用户列表和插件更新。这三个习惯养成之后,黑链在你网站上存活的时间不会超过两周——而两周的暴露时间,对SEO的伤害是可控的。怕就怕半年不检查一次,等收录掉了一半才反应过来,那时候恢复成本就高了。
黑链检测有三条线:技术线(grep扫描文件、开源脚本定时跑)、平台线(百度搜索资源平台安全告警、Google Search Console Security Issues)、人工线(定期检查用户列表、插件更新、最近修改文件)。三条线同时跑,黑链基本没有生存空间。清理的时候记住顺序——先隔离、再查入口、再清代码、再堵漏洞、最后验证申诉。顺序反了等于白干。
