网页防篡改配置清单:上线前必查的15个检查点 核心要点图解,防篡改的核心是权限最小化加完整性基线,缺一不可。;上线前必须建立文件哈希基线,否则篡改无法被及时发现。;Web目录应对运行账户只读,写入权限只留给上传目录。;仅靠WAF不够,需与文件监控和告警形成闭环。
网页防篡改配置清单:上线前必查的15个检查点 · 核心要点一图读懂(AegisX)

核心要点(TL;DR)

  • 防篡改的核心是权限最小化加完整性基线,缺一不可。
  • 上线前必须建立文件哈希基线,否则篡改无法被及时发现。
  • Web目录应对运行账户只读,写入权限只留给上传目录。
  • 仅靠WAF不够,需与文件监控和告警形成闭环。

首页突然变成博彩页面、源码里多出一段加密 JS、index.php 的修改时间显示在凌晨三点——这类事故的共同点是:攻击者早已落地文件,而你在数周后才发现。网页防篡改不是装一个插件就完事,而是一套「权限收口 + 基线比对 + 实时告警」的配置组合。下面这份清单按上线顺序排列,共 15 个检查点,每条都给出可执行命令,照着打勾即可。

一、先搞清:网页防篡改到底在防什么

篡改通常分三类:静态页面与模板被替换(挂马、暗链)、脚本文件被注入后门(webshell)、配置与计划任务被改写(持久化)。三类都表现为「文件内容发生变化」,因此检测手段统一为完整性校验,阻断手段统一为权限与执行限制。理解这一点,后面的清单才不会变成盲目堆工具。

二、上线前 15 个检查点(逐项打勾)

权限与账户(1-5)

  1. Web 进程独立低权限账户运行:确认 ps -o user= -p $(pgrep -f nginx | head -1) 输出不是 root。
  2. 代码目录对运行账户只读:目录 755、文件 644,属主为部署账户;find /var/www -type d -perm -o+w 应无输出。
  3. 上传/缓存目录禁止执行脚本:Nginx 中 location ~* /uploads/.*\.(php|jsp|sh)$ { return 403; }。
  4. 禁用目录列表与敏感文件访问:关闭 autoindex,拦截 .git、.env、*.bak。
  5. 关闭不必要的写权限来源:FTP 账户、共享目录、CI 部署密钥逐一核对,离职人员密钥立即吊销。

基线、监控与告警(6-10)

  1. 建立文件哈希基线:
    cd /var/www/html
    find . -type f -not -path './uploads/*' -print0 | xargs -0 sha256sum > /root/web_baseline.sha256
    chmod 400 /root/web_baseline.sha256
    基线必须在确认站点干净时生成。
  2. 定时比对基线:cron 每日执行 sha256sum -c /root/web_baseline.sha256 --quiet,有差异即告警。
  3. 实时监控关键目录:inotifywait -m -r -e modify,create,delete,move /var/www/html --format '%w%f %e',输出接入告警通道。
  4. 告警能到人:邮件、企业微信或 webhook 至少通一条,且做过一次真实触发测试。
  5. 日志集中留存:访问日志、错误日志、审计日志保留不少于 30 天,防篡改排查高度依赖时间线。

边界与响应(11-15)

  1. WAF 开启虚拟补丁与篡改规则:对上传、命令执行、文件包含类请求做拦截,规则更新保持自动。
  2. 关闭危险配置:PHP 侧 disable_functions 禁用 exec,system,passthru,shell_exec,关闭 allow_url_include。
  3. 备份可恢复且离线:至少一份异地或对象存储只读备份,做过恢复演练。
  4. 应急流程上墙:谁下线、谁取证、谁恢复、谁对外沟通,四件事有明确责任人。
  5. 上线后 24 小时内复核一次:重跑基线比对与权限扫描,确认无新增可写点。

三、关键配置对比:只读与可写的边界

目录类型权限建议可执行脚本纳入基线
代码/模板目录755 / 644,只读否是
上传目录755,属主为 Web 用户否(403)否
缓存/日志目录750,限制访问否否
配置文件600,属主 root否是

这张表的价值在于:把「可写」压缩到最小集合,篡改面自然收窄。凡是既不在基线内、又可写的目录,都是风险敞口。

四、发现篡改后的处置顺序

第一步隔离:切维护页或摘除流量,保留现场。第二步取证:记录变更文件清单、访问日志可疑请求、进程与网络连接快照。第三步定位:比对基线找出全部改动,检查 crontab -l、/etc/cron.*、启动项与新增账户。第四步清除与恢复:从可信备份还原,删除后门并轮换全部口令与密钥。第五步复盘:补齐清单中失守的检查点。

顺序错了代价很大:先恢复后取证,等于亲手销毁攻击者留下的入口线索,二次入侵往往就在几天后。

五、把清单变成日常机制

清单只在上线时打勾一次是不够的。建议把第 6、7、8 项做成每日自动任务,第 2、3 项做成每周扫描,第 13 项每季度做一次恢复演练。防护能力上,可在边界侧配合 AegisX 的 WAF 与主机文件监控能力,把「拦截」与「发现」串成一条链路:请求被拦、文件被改,都能落到同一条告警里。

行动建议

今天就做三件事:生成第一份哈希基线、跑一遍权限扫描、把 inotify 告警接通到人。三件事做完,你的站点就从「被改了不知道」进入「分钟级可发现」。剩下的检查点,按周补齐即可。

常见问题(FAQ)

网页防篡改只装个WAF够不够?

不够。WAF主要拦截外部攻击流量,无法发现通过弱口令SSH、供应链投毒或内部误操作造成的文件落地。真正有效的网页防篡改需要三层:权限最小化限制写入、哈希基线加实时监控发现变更、WAF与告警阻断并通知。只依赖单一手段,一旦攻击绕过WAF或从主机侧进入,页面被替换也可能长时间无人察觉。

怎么快速建立网站文件哈希基线?

进入站点根目录执行 find . -type f -not -path './uploads/*' -print0 | xargs -0 sha256sum > /root/web_baseline.sha256,排除上传与缓存目录。建议把基线文件存放在站点目录之外并设置只读,随后用 cron 每日比对:sha256sum -c /root/web_baseline.sha256 --quiet。首次基线务必在确认站点干净时生成,否则会把后门一并纳入白名单。

网站目录权限应该怎么设置才安全?

原则是运行账户对代码目录只读,仅上传、缓存、日志目录可写。典型做法:目录 755、文件 644,属主为部署账户,Web 进程以独立低权限用户运行;上传目录禁止执行脚本,Nginx 中用 location 匹配并返回 403。切勿图省事给 777,也不要让 Web 进程以 root 运行,否则一次漏洞即可改写全站文件。

发现首页被篡改,第一步做什么?

先隔离取证,不要立刻覆盖恢复。立即下线或切换维护页,保留被篡改文件、访问日志、进程与网络连接快照,记录时间点;再比对哈希基线定位全部变更文件,排查 webshell 与计划任务、启动项。取证完成后再从可信备份恢复并轮换所有口令与密钥。直接覆盖会破坏溯源线索,攻击者往往留有二次入口。

小站没有安全团队,怎么做低成本防篡改?

用系统自带工具即可搭最小闭环:sha256sum 建基线加 cron 定时比对,inotifywait 监控站点目录变更,变更即发邮件或 webhook 告警;关闭目录列表、禁用危险函数、限制上传目录执行权限;再配合云 WAF 或主机防护的基础规则。成本几乎为零,但能把发现时间从数周缩短到分钟级。