静态内容防篡改

静态内容防篡改

给站点根目录建 SHA-256 哈希基线,定时巡检发现改动即告警;enforce 模式下拦截被篡改与新增文件,专挡 WebShell。

给静态站点与 PHP 站点的文档根建立一份 SHA-256 哈希基线,之后定时巡检:文件被改、被新增,立刻告警。enforce 模式下更进一步——响应或执行之前逐文件校验,被篡改或不在基线内的文件直接 403。对 PHP 站来说这是一道很硬的 WebShell 防线:没在基线里的 .php 根本不给执行

#两种模式

monitor(默认)定时巡检根目录,与基线比对,发现增 / 改 / 删即告警。零请求开销,适合先观察。
enforce在 monitor 基础上,发文件 / 执行 PHP 前逐个校验哈希。被篡改(hash 不符)或新增(不在基线内)→ 403 拦截 + 告警。有每请求哈希开销,按需开启。
无基线时 fail-open——没有基线就无法凭空 enforce,此时不影响任何请求。

#部署工作流

  1. 1
    把站点文件部署到根目录确保当前目录内容就是你期望的「干净状态」。
  2. 2
    在站点表点「生成基线」控制台站点管理里每行都有这个按钮,会遍历 root 生成哈希快照并落盘。
  3. 3
    选模式先 monitor 观察一段时间,确认没有把正常的运行时写入误报成篡改,再考虑 enforce。
  4. 4
    每次正常发版后重新生成基线这一步最容易忘——新部署的文件在 enforce 下会被当成「新增」拦掉。
别忘了排除可变目录运行时会变的目录(上传目录、缓存目录、日志)必须写进 exclude,否则用户一上传文件就报篡改。典型如 WordPress 的 wp-content/uploads 与各类 cache/runtime/

#关键字段

字段 / 控件默认 / 示例说明
enabledfalse总开关(在站点的静态 / PHP 选项里)。
modemonitormonitor 只告警;enforce 拦截。
scan_interval_seconds定时巡检周期,按站点独立设置。
exclude[]排除路径,运行时可变目录写这里。
max_files快照文件数上限,防止误指向超大目录。

#发现篡改后会怎样

  • 攻击日志里出现一条 integrity 检测器的事件,写明是新增还是被改。
  • 告警通知 的配置推送到钉钉 / 飞书 / Slack / Webhook。
  • enforce 模式下该请求返回 403,文件不会被发出去、PHP 不会被执行。
  • 指标 moguard_integrity_tamper_total{kind} 计数,可接监控看板。
别名站点(多域名指向同一目录)共享同一份基线,不必重复生成。

相关:静态托管与 PHP FastCGI · 站点管理 · 告警通知