documentroot 是文件完整性校验的可信基线而非自动校验工具,需结合哈希清单比对、严格权限控制(755只读、禁止.htaccess)、运行时防护(禁用execcgi/includes/followsymlinks、filesmatch拒绝写入、mod_security拦截广告关键词)构建三重防线。

DocumentRoot 本身不提供文件完整性校验能力,但可以作为校验的锚点路径——所有校验逻辑都围绕它展开。关键不是“让 Apache 自动检测”,而是把 DocumentRoot 设为可信基线,再通过外部工具定期比对、配合权限锁定与运行时防护,形成三道防线。
用 DocumentRoot 定义校验范围
DocumentRoot 是网站内容的唯一可信起点,校验必须从这里开始,不能只扫子目录或忽略隐藏文件:
- 明确 DocumentRoot 路径(如 /var/www/example.com/public),确保该路径下只含构建产物,不含源码、配置、日志等无关文件
- 校验脚本必须递归扫描整个 DocumentRoot 目录树,包括 .htaccess、index.php、js/、css/ 等所有可被 HTTP 访问的文件
- 排除临时文件(如 *~、.swp)和构建中间产物(如 node_modules/),但不能排除 .php、.html、.js、.css——这些正是广告代码最常注入的目标
基于哈希的静态文件校验机制
每次部署后生成完整哈希清单,并在校验阶段比对。这不是一次性动作,而是 CI/CD 流水线中的固定环节:
- 在构建完成、文件写入 DocumentRoot 后,执行:
find /var/www/example.com/public -type f \( -name "*.php" -o -name "*.html" -o -name "*.js" -o -name "*.css" \) -print0 | xargs -0 sha256sum > /var/www/example.com/.deploy-checksums - 生产环境定时任务(如每小时)运行比对脚本,一旦发现哈希不一致,立即告警并暂停服务(可触发自动回滚)
- 禁止在 DocumentRoot 内允许写入权限:目录属主设为 deploy:www-data,Apache 进程(www-data)仅读取(chmod 755),不给写权限;PHP 应用若需上传,必须走 Alias 指向 DocumentRoot 外的独立目录
运行时防护:阻断非预期修改路径
即使校验通过,也要防住攻击者绕过校验直接写入。DocumentRoot 的权限与 Apache 配置必须协同封堵所有常见入口:
- 在对应
块中禁用高危功能:
Options -ExecCGI -Includes -FollowSymLinks(防 SSI 注入、CGI 执行、软链逃逸)
AllowOverride None(禁用 .htaccess,避免通过覆盖规则注入重定向) - 用
显式拒绝写入类请求: (配合 mod_rewrite 或前端反向代理拦截 POST/PUT 到静态资源的非法请求)
Require all denied - 启用 mod_security 规则,拦截包含广告特征的响应体关键词(如 taboola、adtech、document.write.*?iframe),在内容发出前截断











