上个月一个做外贸的朋友来找我,说他网站被黑了。症状是:百度搜索结果里出现了大量"澳门赌场""六合彩"的奇怪页面,但这些页面在他网站后台根本找不到。打开网站正常访问一切正常,但用site命令在搜索引擎里一查,收录了三百多页完全不认识的内容。用FTP连上服务器一看,根目录下多了三个php文件:config.php、cache.php、class-mysql.php,文件修改时间是凌晨三点,文件权限777。打开config.php,第一行是 base64_decode,解码出来是一句话木马 。黑客在三个月前就拿到了webshell权限,一直潜伏着没动,等百度收录了他的黑产页面才开始变现。从被挂后门到被发现,整整过去了94天。
网站后门检测的四个层级,从免费手动到全自动云防护
每往上走一层,漏报率降一个数量级,但成本和运维复杂度也翻一倍
| 层级 | 代表工具/方案 | 成本 | 漏报率 | 适合谁 |
| 本地手动扫描 | D盾、河马单机版、WebShellKiller | ¥0 | 约15%-30% | 偶尔查一次的个人站长、小博客 |
| 自动化定期扫描 | ClamAV + cron + inotify + 自写脚本 | ¥0 + 服务器成本 | 约10%-20% | 有运维能力的团队、多站点站长 |
| 云端安全服务 | 阿里云安全中心、华为云HSS、腾讯云NDR | ¥600-3000/年 | 约3%-8% | 云服务器用户、中小型企业站 |
| WAF + 实时阻断 | 阿里云WAF、腾讯云WAF、长亭雷池 | ¥3000-10000/年 | 约1%-5% | 电商、金融、政企、高价值站点 |
一、先把后门分成三类,每类的检测手段完全不一样
网站后门不是一个东西,是三种技术形态完全不同、藏匿位置完全不同的恶意程序。用同一种方法去查三种后门,一定会漏掉至少一种。
三种后门的检测逻辑完全不重叠。文件型用D盾,内存型用河马,系统级用Tripwire或inotify监控文件变化。只装了一个D盾就以为"查完了",大概率漏掉了内存马和系统级后门。
二、免费本地扫描工具,D盾和河马搭配用漏报率最低
对于个人站长和中小站点,免费工具已经够用,但前提是两款工具搭配用,不是二选一。
D盾 — 静态特征扫描,覆盖面广但怕混淆
检测原理:特征库匹配 + 语法分析。内置数万条webshell特征规则,扫描所有脚本文件(php/asp/jsp/aspx),识别 eval、assert、system、exec、preg_replace /e 等危险函数调用。
优势:免费、扫描快(10万文件约30秒)、Windows一键操作、报告指出可疑代码行号和匹配特征、对已知的一句话木马和常见大马识别率接近95%。
短板:纯静态分析,对混淆加密(base64+gzcompress多层嵌套、自定义加密函数、序列化+spl_autoload_register等)漏报率较高。正常框架代码(如ThinkPHP的缓存文件、Composer生成的autoload)容易被误报。

平台:仅Windows(需要Windows环境运行,Linux服务器上的文件需下载到Windows本地扫描)。
下载:d99net.net 官方站点,免费绿色版。
河马 — 动态行为分析,专治混淆和内存马
检测原理:沙箱模拟执行 + 机器学习。在隔离环境中模拟运行PHP/JSP代码,监控是否尝试执行系统命令、外联网络、读写敏感文件。结合AI模型判断行为是否恶意。
优势:对混淆加密后门检测能力强(因为不管你怎么加密,执行时总要解密成恶意行为)、误报率比D盾低、能检测部分内存马、支持Linux和Windows双平台。
短板:扫描速度比D盾慢(需要模拟执行)、资源占用高、对于"沉睡"后门(从未被触发过的webshell)效果不如特征匹配。
价格:单机免费版功能完整,企业版按服务器数量付费。
下载:shellpub.com 官方站点,提供Linux/Windows双版本。
两款工具的组合策略很明确:D盾做初筛——把所有网站文件拖进去跑一遍,标记出所有可疑文件;河马做确认——把D盾报警的文件单独提出来用河马深度分析,剔除误报(框架代码、正常加密业务代码),揪出D盾漏掉的混淆后门。
别在线上服务器上直接跑扫描工具。正确的做法是:先把整个网站目录打包下载到本地或分析虚拟机,在隔离环境里做扫描,确认没有后门之后再覆盖线上。原因有两个:一是扫描工具本身要读取所有文件,对I/O有压力;二是如果后门已经具备自毁或反检测机制,在线上运行扫描可能触发它的反制逻辑。

三、Linux服务器上的自动化防线,三件免费工具搭起来不花一分钱
手动扫描的问题是"想起来了才查一次",两次扫描之间可能有几周甚至几个月的空窗期。那个外贸朋友的网站94天才发现后门,就是因为扫描不是定期的。
Linux服务器上可以用三个免费开源工具搭一条自动化检测链:
# 安装
sudo apt install clamav clamav-daemon -y
sudo freshclam # 更新病毒库
# 创建每日扫描脚本 /opt/security/clamav-scan.sh
#!/bin/bash
LOG="/var/log/clamav/daily-scan-$(date +%Y%m%d).log"
clamscan -r -i --max-filesize=50M --max-scansize=50M \
--exclude-dir="^/sys\|^/proc\|^/dev" \
/var/www/html > "$LOG" 2>&1
# 发现可疑文件,发邮件告警
if grep -q "FOUND" "$LOG"; then
mail -s "网站后门告警" admin@xxx.com < "$LOG"
fi
# 加入crontab,每天凌晨3点自动扫描
0 3 * * * /bin/bash /opt/security/clamav-scan.sh
ClamAV是开源免费的杀毒引擎,虽然查杀率比不上商业产品,但它的webshell特征库在持续更新,对常见的eval、assert一句话木马和已知大马有较好的检出能力。作为免费方案的第一道防线足够了。
# 安装inotify-tools
sudo apt install inotify-tools -y
# 创建监控脚本 /opt/security/inotify-watch.sh
#!/bin/bash
WATCH_DIR="/var/www/html"
inotifywait -m -r -e create,modify,delete,move \
--format '%T %w%f %e' --timefmt '%Y-%m-%d %H:%M:%S' \
"$WATCH_DIR" | while read line; do
echo "$line" >> /var/log/file-monitor.log
# 新创建的文件立即扫描
filepath=$(echo "$line" | awk '{print $3}')
if echo "$line" | grep -q "CREATE"; then
clamscan --no-summary "$filepath" >> /var/log/file-monitor.log 2>&1
fi
done
# 用systemd设为开机自启的服务
inotify的核心价值是实时性——任何新文件写入网站目录的瞬间就会被检测到,ClamAV可以对新文件做即时扫描。ClamAV的每日定时扫描最多延迟24小时,inotify把这个延迟缩短到秒级。
# 找出监听在非标准端口上的进程
ss -tlnp | grep -v ":22\|:80\|:443\|:3306"
# 找出对外发起可疑连接的进程
netstat -antp | grep ESTABLISHED | grep -v ":80\|:443\|:53\|:3306"
# 检查crontab有没有异常定时任务
crontab -l && cat /etc/crontab && ls /etc/cron.*
# 检查最近24小时内修改过的php文件
find /var/www/html -name "*.php" -mtime -1 -ls
# 检查777权限的文件
find /var/www/html -perm 777 -type f
这三条命令应该是安全巡检的标配。很多系统级后门不会留在网站目录里,而是通过修改crontab定时下载恶意脚本执行,或者在非标准端口上开一个反向shell。文件扫描工具只查网站目录,看不到这些。
四、云端安全服务,六百到三千一年值不值
阿里云、腾讯云、华为云都提供了主机安全产品,内置webshell检测和木马查杀功能。和免费工具比,多了两个核心能力:
| 能力 | 免费工具做不到的 | 为什么重要 |
| 实时阻断+自动隔离 | 发现webshell后不仅告警,还能自动把恶意文件移到隔离区,防止被进一步利用 | 从发现到处置的时间从"人工处理的小时级"缩短到"秒级自动" |
| 云端威胁情报联动 | 和云端海量威胁情报库实时比对,识别出被标记为恶意C2服务器的通信 | 本地工具看不到外联行为的威胁情报上下文,只能看到"有个连接" |
四家云厂商的webshell检测能力对比如下:
如果你用的是云服务器,先看云厂商的基础版(免费)能不能覆盖需求。阿里云和华为云的基础版已经包含基本的webshell检测和告警,对个人站长和小企业够用了。企业版的价值在"自动隔离"和"攻击溯源",当你管着10台以上服务器或者网站被黑一次的经济损失超过几千块时,企业版的钱就值得花。
五、WAF是最后一道防线,但别拿它当唯一防线
WAF(Web应用防火墙)的核心作用是在上传阶段就拦截webshell文件,不让恶意文件落到服务器上。阿里云WAF、腾讯云WAF、长亭雷池这些产品能识别上传文件中的恶意代码模式,在请求到达Web服务器之前就拦截掉。

但WAF有一个致命的盲区:它只能拦截"从HTTP请求进来的",对于以下场景完全无效——
· 通过SSH、FTP直接上传的webshell(不走HTTP通道,WAF看不到)
· 通过第三方组件漏洞(如phpMyAdmin弱口令、Redis未授权访问)直接写文件
· 供应链攻击(下载的插件/主题/依赖包里预埋了后门)
· 内存马(根本没有文件落地过程,WAF看不到文件上传行为)
正确的安全架构应该是WAF做前置拦截 + 主机安全/定期扫描做后置检测 + 文件完整性监控做实时感知,三层叠加才有纵深防御效果。只装WAF不装主机安全,等于把大门锁了但阳台窗户开着。
六、被挂后门后的六步应急响应,顺序错了等于白干
发现网站被挂后门后,大多数人的第一反应是"赶紧把那个恶意文件删掉"。这个操作在90%的情况下是错的——因为你只删了一个webshell文件,但黑客是怎么把这个文件传上来的漏洞还在。不堵漏洞就清后门,第二天又会被传一个新的。
这六步里最容易跳过的就是第3步和第5步——直接删文件然后以为问题解决了。结果是黑客的webshell被删了,但漏洞还在,第二天换了个文件名又传了一个新的上来。
七、按场景选方案,从零预算到万元年费
网站后门检测这件事,免费方案和付费方案在"能不能查出后门"这个维度上差距不大——D盾加河马的组合搭配,对文件型webshell的检出率已经能做到85%以上。真正拉开差距的是三个东西:扫描频率(手动一年两次 vs 自动化每天一次,发现的时效差了几百倍)、检测范围(只查网站目录 vs 连系统文件、内存、网络连接一起查)、处置速度(发现后人工删除 vs 自动隔离阻断)。不想花钱的,把ClamAV定时扫描和inotify文件监控搭起来,每天自动跑一次,至少不会出现被挂了94天还不知道的情况。
