服务器被挂黑链,如何批量删除并修复被篡改文件?
黑链到底是什么?怎么知道自己中招了?
黑链就是攻击者偷偷在你网站页面的源代码里嵌入的隐形链接,通常指向博彩、色情等非法站点。
普通用户看不到,但搜索引擎爬虫能抓到,会导致网站降权甚至被封。
自查方法:打开站点任意页面的源代码(浏览器右键→查看网页源代码),搜索 href="http 或 a href,如果发现域名不认识、链接藏在一个很小的div或iframe里,十有八九被挂了黑链。
更明显的特征是:首页或核心页面打开后,底部多了一段白色文字或占位符,鼠标移过去才发现有链接。
准备工作:先备份再动手
不管用什么方法修复,必须先对网站文件做完整备份。
零基础用户推荐用宝塔面板的“备份”功能,或直接用FTP把所有文件下载到本地。
- SSH工具:推荐Xshell或Putty,Windows系统直接搜索下载。
- 命令行环境:本文以Linux+Nginx/Apache环境为例,Windows服务器请找对应的管理工具。
- 超级管理员权限:登录SSH后,使用
sudo -i或切换到root用户。
如果你用的是宝塔面板,也可以通过“文件”管理功能手动查看和删除文件,但批量查找还是命令行更快。
批量扫描被篡改文件:用grep命令一招定位
黑链的常见特征:链接中的域名是固定的(比如 bad123.com),或者恶意代码藏在不显眼的JS文件里。
第一步:找出包含黑链域名的文件
grep -r -i "bad123.com" /www/wwwroot/你的站点目录/ --include="*.php" --include="*.html" --include="*.js"
-r表示递归搜索子目录;-i忽略大小写;- 后面的目录换成你网站的实际根目录;
--include只搜索常见动态和静态文件,减少无关干扰。
如果已知黑链使用了某种隐藏手法(例如通过 eval() 动态输出),可以搜索 eval(base64_decode 等关键词:
grep -r -i "eval(base64_decode" /www/wwwroot/
第二步:将结果保存到文件,方便逐行处理
grep -r -l "bad123.com" /www/wwwroot/ > hacklist.txt
-l 只输出文件名,不输出具体行内容。
删除与修复:安全清理被篡改文件
拿到名单后,不要直接全删,因为有些文件可能是正常的且包含备份内容。
建议逐个检查:
- 用
cat或vim查看文件可疑部分,确认是否只有黑链代码。 - 如果是干净的文件被注入了额外代码,用备份覆盖(推荐)或用sed命令删除指定行。
用sed批量删除包含黑链域名的行(谨慎使用):
sed -i '/bad123\.com/d' 文件名
若需要批量处理,配合 xargs:
cat hacklist.txt | xargs sed -i '/bad123\.com/d'
注意命令中的点号 \. 要转义,否则会被当成通配符。
更稳妥的做法:直接删除可疑文件后,从干净的备份中恢复。
如果文件是WordPress的wp-config.php、index.php等核心文件,被修改后强烈建议用官方版本覆盖。
避坑指南:别踩这五个雷
- 不要直接格式化或重装系统——如果文件备份完整,只需清理被黑的文件即可。
- 权限不够导致修复失败:grep不到任何内容?检查当前用户是否对网站目录有读权限。
chmod -R 755可临时放开(生产环境注意安全)。 - 隐藏目录和名字特殊的文件:攻击者常在文件名加空格或点开头(如
. .php),用ls -la查看隐藏文件。 - 别忘了数据库里的黑链:部分黑链写在数据表字段中(如文章内容),需要登录phpMyAdmin或宝塔“数据库”管理,搜索并替换。
- 修复后未及时更改密码:清理完文件后,必须修改FTP、数据库和服务器登录密码,否则很快再次被挂。
验证清除效果与后续加固
验证方法:
- 再次运行之前的grep命令,确保不再有匹配结果。
- 用浏览器查看页面源代码(特别是首页),确认没有陌生链接。
- 用在线工具搜索“site:你的域名”看看搜索引擎是否还收录了异常页面。
加固建议:
- 升级CMS到最新版本,及时修补漏洞。
- 移除不需要的插件、主题。
- 设置文件权限为
644(文件)和755(目录),降低被写入风险。 - 定期扫描:可编写cron任务每周执行一次grep命令,结果发邮件通知。
如果你按照上面的流程走一遍,服务器被挂黑链的问题基本能解决。
遇到报错或特殊情况,先看避坑部分,大部分问题都能自己排查。
实在不行,再找专业人士帮忙也不迟。