凌晨三点收到短信,服务器上12个WordPress站的首页全被替换成了博彩页面。第一反应是进宝塔看文件修改时间——12个站的index.php在同一个时间戳被批量改写,作案时间不到30秒。事后查出来是其中一个站装了破解版主题,里面捆了Webshell后门,通过服务器的同一个PHP用户权限横向感染了所有站点。如果你那台服务器上挂了超过5个网站,而且没有一个统一的防篡改机制,这个场景离你并不远
防篡改这件事,2026年已经从"有没有"变成了"能不能批量管"
单站防篡改很简单——宝塔插件点一下、Wordfence扫一遍、文件权限锁死644/755,十分钟搞定。但一台服务器上挂了10个站、三台服务器上挂了30个站的时候,问题就变成了:有没有一个工具能一次性给所有站开启防篡改?开启之后能不能统一看所有站的文件变更告警?升级主题/插件的时候能不能一键临时关闭再一键恢复?这三个问题筛掉了市面上90%的防篡改工具,因为它们本质上都是单站工具
一、防篡改的本质是两层:阻止写入 + 检测变化,大部分工具只做了第一层
在对比工具之前,先把防篡改这件事拆清楚。它分两个层面:
关键认知:两层不是"二选一",而是必须叠加使用。第一层挡住99%的自动攻击脚本,第二层兜底——万一第一层被绕过(比如攻击者拿到了FTP密码直接上传),至少能在几分钟内发现并自动恢复。只做一层等于留了一个口子
二、九款工具跑了同一个多站点防护场景,批量管理能力天差地别
测试场景:一台服务器上10个WordPress站,需要一次性给所有站开启防篡改保护,统一监控文件变更告警,升级插件时一键暂停再一键恢复。
关键发现:没有一款工具能同时做到"阻止写入"和"检测变化"双满分+批量管理满分。安全狗云固和云锁最接近全能——内核级写入保护+文件变化检测+多站点统一管理面板,但需要付费商业授权。免费方案里,宝塔防篡改插件+自建inotify脚本的组合是最实用的。Wordfence的Wordfence Central多站点仪表板是WordPress生态里的批量管理标杆
三、WordPress生态:Wordfence和Sucuri的防篡改能力不在一个维度
如果是WordPress站,这两款插件是最主流的选择,但它们的防篡改逻辑完全不同:

Wordfence:端点WAF+深度文件扫描
- WAF运行在服务器端,拦截恶意请求阻止注入攻击
- 文件完整性扫描:对比WordPress官方仓库签名,检测任何被修改的核心文件、插件、主题
- Wordfence Central:免费的多站点集中管理仪表板,一个面板看所有站的告警和安全状态
- 免费版已包含防火墙和扫描功能
- Premium $119/年/站,多了实时恶意软件签名更新和IP黑名单
- 短板:WAF在服务器端运行,极端DDoS时自身也可能成为瓶颈
Sucuri:云WAF+专业清理服务
- 云WAF运行在网络边缘,恶意流量在到达服务器之前就被过滤
- 文件完整性监控检测核心文件变化
- 付费版包含无限次专业恶意软件清理服务——被黑了有人帮你清
- 免费版没有WAF,只有基础的文件监控和黑名单检查
- 付费版$199/年起,包含CDN加速
- 短板:批量管理能力不如Wordfence Central,多站点管理入口较分散
选择逻辑:如果你自己有技术能力排查和清理恶意代码,Wordfence免费版+Wordfence Central多站点管理是最经济的方案。如果你不想自己处理被黑后的清理工作,Sucuri付费版的"无限次清理"服务值那个差价。Wordfence是给你工具自己防,Sucuri是帮你防+出事了帮你清。
四、服务器级:宝塔、安全狗、云锁三款工具的批量管理实测
对于非WordPress的网站(自建系统、PHP框架、HTML静态站),需要在服务器层面做防篡改。三款主流工具在同一个"10站服务器"场景下的实际体验:
宝塔防篡改插件的核心优势是零成本+极低性能开销,inotify事件驱动机制只在文件变动时触发,几乎不消耗额外CPU。但批量管理能力基本为零——10个站就要手动添加10次保护目录、手动查看10个风险记录列表、升级插件时要逐站暂停再逐站恢复。站点数超过5个之后,操作成本直线上升。
安全狗云固和云锁在5个站以上的场景里效率优势明显,统一管理控制台可以分组批量操作,跨服务器也能统一管。但两者都需要商业授权,价格不透明需要联系厂商报价,对个人站长来说门槛偏高。
五、免费自建方案:50行Shell脚本实现多站点批量防篡改监控
如果你不想花钱买商业产品,又需要管理超过5个站点,最实际的方案是宝塔防篡改插件(第一层阻止写入)+ 自建批量监控脚本(第二层检测变化)。下面是经过验证的批量脚本逻辑:
#!/bin/bash# 多站点批量文件完整性校验脚本# 用法:首次运行建hash库,之后每次运行比对差异# 定义所有站点目录SITES=("/www/wwwroot/site1.com""/www/wwwroot/site2.com""/www/wwwroot/site3.com"# ... 添加所有站点)HASH_DB="/root/site_hashes.db"ALERT_LOG="/var/log/tamper_alert.log"# 排除缓存/临时目录,避免误报EXCLUDE="cache|tmp|backup|logs|wp-content/cache|.git"# 初始化hash库(首次运行)if [ "$1" == "init" ]; then> $HASH_DBfor site in "${SITES[@]}"; dofind "$site" -type f | grep -vE "$EXCLUDE" | \xargs md5sum >> $HASH_DBdoneecho "Hash库初始化完成,站点数:${#SITES[@]}"exit 0fi# 检测变化(crontab定时运行)CHANGED=$(md5sum -c $HASH_DB 2>/dev/null | grep -v "OK$" | wc -l)if [ $CHANGED -gt 0 ]; thenecho "[$(date)] ALERT: 发现 $CHANGED 个文件变更" >> $ALERT_LOGmd5sum -c $HASH_DB 2>/dev/null | grep -v "OK$" >> $ALERT_LOG# 这里接入钉钉/微信/邮件告警通知fi
部署三步
- 第一步:网站部署完成后跑一次
bash check.sh init建立基准hash库 - 第二步:crontab设置每30分钟跑一次
bash check.sh - 第三步:发现变更时自动发钉钉/微信通知,并从备份恢复
三个必须排除的目录
/wp-content/cache/— WordPress缓存目录,正常访问就会变/uploads/— 用户上传目录,新上传不等于篡改/tmp/和/backup/— 临时文件和备份目录
这个脚本的局限性也很明确:只做检测不做阻止。它不能防止文件被篡改,只能告诉你"被篡改了"然后帮你恢复。所以它必须和宝塔防篡改插件配合使用——插件锁住目录阻止90%的攻击,脚本监控剩余的10%漏网之鱼。

六、四个最容易翻车的地方,工具不会自动帮你处理
七、六个场景的工具组合方案
最后说一句
网站防篡改在2026年最容易被忽略的问题不是"装不装工具",而是装了之后会不会用。宝塔防篡改插件免费、好用、性能开销几乎为零,但如果你只在装的那天点了一下"开启",之后升级插件时忘了关导致白屏、缓存目录没排除导致告警刷屏、PHP跨站没隔离导致一个站被黑全服感染——那这个工具等于白装。
防篡改的完整闭环是阻止写入 + 检测变化 + WAF防注入 + PHP用户隔离 + 定期备份,五件事缺一不可。工具能帮你解决前三件,后两件(用户隔离和备份)是运维习惯,任何工具都替代不了。如果你服务器上超过5个站,把PHP运行用户隔离开,优先级比装任何防篡改工具都高——这是血的教训换来的结论

