防篡改插件日志看不到暗链,因其仅校验文件哈希与监控写入行为,不解析html/js内容;揪暗链需主动扫描+快照比对双线并行,并注意全量校验、排除动态目录、避免误报及chattr锁导致的监听失效。

防篡改插件日志里看不到暗链,是因为它不扫描内容
堡塔网页防篡改和企业级防篡改插件都只校验文件哈希值与监控写入行为,不解析 HTML/JS 内容,所以嵌在 <iframe></iframe> 或 document.write() 里的暗链不会触发告警。它们能告诉你 index.html 被改了,但不会告诉你改成了什么。
真正要揪出暗链,得靠主动内容扫描 + 防篡改快照比对双线并行:
- 用插件的「立即校验」功能生成当前文件快照,再手动下载异常文件本地查源码
- 配合
grep -r "iframe\|eval\|document\.write\|window\.location" /www/wwwroot/your-site/ --include="*.html" --include="*.js"快速定位可疑字符串 - 企业级插件的日志路径是
/www/server/panel/plugin/btFileShield/logs/,里面access.log记录拦截详情,error.log记录规则加载失败(比如进程白名单没生效)
全局文件 MD5 校验脚本必须避开动态目录
直接对整个 /www/wwwroot/ 做 find ... -exec md5sum {} \; 会把缓存、上传、日志这些本该变化的文件也纳入比对,导致每天报警——这不是漏报,是误报淹没了真问题。
正确做法是分层校验:
- 只对静态资产目录做全量哈希:如
/www/wwwroot/example.com/{css,js,images,static} - 对模板类文件单独建表:
find /www/wwwroot/example.com -name "*.php" -path "*/templates/*" -exec md5sum {} \; > /tmp/php-templates.md5 - 排除已知动态路径:用
! -path "/www/wwwroot/example.com/runtime/*" ! -path "/www/wwwroot/example.com/storage/*"过滤 - 校验脚本里加时间戳判断:比对前先
stat -c "%y" /tmp/last-check.md5,超 24 小时才跑新校验,避免高频 IO 拖慢面板
为什么「立即校验」后找不到被篡改的 PHP 文件?
因为默认校验模式是「增量校验」,只比对上次快照之后有 mtime 变更的文件。如果攻击者用 touch -d "2025-01-01" evil.php 伪造时间戳,或通过 FTP 修改但未触发 inotify 事件,这个文件就会被跳过。
紧急排查时必须强制全量校验:
- 进「安全 → 网页防篡改 → 立即校验」,选「全量校验」而非默认项
- 校验前先清空旧快照:
rm -f /www/server/panel/plugin/btFileShield/data/snapshot_*.json(企业版路径为/www/server/panel/plugin/btFileShield/data/) - 校验完成后立刻导出异常列表:
cat /www/server/panel/plugin/btFileShield/data/check_result.json | jq '.abnormal[] | .path'(需提前装jq) - 注意:全量校验会短暂占用 CPU,避开业务高峰执行
chattr +i 锁定关键配置文件反而让防篡改失效
给 /www/server/panel/vhost/nginx/your-site.conf 加 chattr +i 后,宝塔面板无法重载 Nginx 配置,导致「网站防篡改」插件的底层监听模块(bt_crack)无法注入文件监控规则——现象是开关显示开启,但实际无任何拦截日志。
真正该锁的只有两类文件:
- 你确认永不修改的站点专属 rewrite 规则,路径如
/www/server/nginx/conf/rewrite/your-site.conf - 自定义的 WAF 规则文件,如
/www/server/btwaf/rule/attack.conf - 所有带
chattr +i的文件,必须确保其父目录权限为755且属主为root,否则子文件锁可能被绕过 - 解锁前务必停掉防篡改服务:
bt stop btFileShield,否则chattr -i会失败
最常被忽略的是:企业级插件依赖 /www/server/panel/plugin/btFileShield/bin/fileshield 进程持续运行,而这个进程本身会被 chattr +i 锁死的配置文件间接影响启动——检查 ps aux | grep fileshield 是否存活比看面板开关更可靠。











