敏感文件泄露是什么
部署残留会把配置文件、版本库目录、备份与编辑器临时文件暴露在 Web 根目录下:.env 里有数据库口令与接口密钥,版本库目录里有完整源码与提交历史,编辑器临时文件里有源码片段,打包文件里更是全量数据。这类问题的特点是「文件名可猜」——攻击者按常见命名逐个尝试即可命中,不需要复杂技术。治理要覆盖部署全流程:构建阶段排除、发布后自动扫描、访问层拒绝规则兜底,三条同时做才算稳妥。
基本信息
| 常见文件 | .env 与配置副本、版本库目录、备份压缩包、编辑器临时文件 |
|---|---|
| 常见来源 | 手工部署残留、构建打包未排除、编辑站点产生的副本 |
| 直接危害 | 凭据泄露、源码泄露、全量数据可下载 |
| 治理顺序 | 构建排除、发布后扫描、访问层拒绝兜底 |
| 覆盖范围 | 站点目录、子目录、多站点与其他运行环境 |
| 验证方式 | 对自身站点做敏感路径自查并核对访问日志 |
典型场景
- 手工部署时把整个项目目录上传,包含本地配置与版本库
- 构建产物里带有源码映射文件,可还原前端源码
- 编辑线上文件产生的临时文件与副本未清理
- 多站点共用服务器,某个站点目录下残留备份文件
- 容器镜像把配置文件直接打进可公开服务的目录
- 历史遗留站点长期无人维护,残留文件多年未清理
常见泄露文件名
常见泄露文件名
.env / .env.bak / config.php.old
.git/config / .svn/entries
www.zip / web.tar.gz / backup.sql
index.php~ / .index.php.swp
.DS_Store / Thumbs.db
# 命名有规律可循:备份类多带日期或 old/bak 后缀,编辑器临时文件多为波浪号或 swp 结尾Nginx 拦截示例
Nginx 拦截示例
location ~ /\.(git|svn|env|DS_Store) { deny all; }
location ~* \.(bak|old|swp|sql|zip|tar\.gz)$ { deny all; }
# 规则要覆盖常见变体,并按需补充业务特有后缀
# 访问层拒绝只作兜底,核心是把文件挡在 Web 目录之外治理环节与动作
| 环节 | 动作 | 作用 |
|---|---|---|
| 构建 | 排除配置、版本库与临时文件 | 从源头不产生残留 |
| 发布 | 自动化扫描产物文件名 | 发现遗漏并按门禁拦截 |
| 运行 | 访问层拒绝规则 | 兜底拦截常见敏感路径 |
| 运维 | 定期自查与日志核对 | 发现历史遗留与被访问迹象 |
打包发布前对构建产物做一次文件名扫描;上线后定期对自身站点做敏感路径自查。
确认敏感文件曾可访问后,应按泄露处理:轮换其中的口令与密钥,核查访问日志判断是否被下载,而不只是删除文件。