首页/安全/漏洞与攻击面速查/网站目录中的备份与敏感文件泄露
主机与服务风险面53 条

网站目录中的备份与敏感文件泄露

把数据库导出、站点打包或配置文件放在 Web 根目录下,是最常见的敏感信息泄露来源之一;*.sql、*.bak、*.zip、.env、.git 目录等路径被爬取或扫描后可直接下载。

漏洞与攻击面速查安全更新于 2026-10-13

备份与敏感文件泄露是什么

把数据库导出、站点打包或配置文件放在 Web 根目录下,是最常见的敏感信息泄露来源之一:备份文件名往往是约定俗成的,如数据库名加日期后缀,攻击者按常见命名逐个尝试即可命中。这类文件一旦可下载,等同于直接交出了全量数据或数据库凭据;此外 .env、版本库目录、编辑器临时文件与源码映射文件也常因部署残留而暴露,泄露内容从密钥到源码逻辑都可能包含。治理要同时做三件事:目录治理、访问层拒绝规则与部署流程检查。

基本信息

常见文件类型sql 与压缩包备份、.env 配置、版本库目录、编辑器临时文件
常见来源运维手工备份、部署脚本打包残留、本地开发文件误上传
直接危害全量数据下载、数据库凭据泄露、源码与内部结构暴露
目录治理备份与配置移出 Web 根目录,存放在带鉴权的下载通道后
访问层兜底按后缀与目录规则拒绝访问,作为第二道防线
流程检查部署与上线检查表增加残留文件扫描项

典型场景

  • 运维为方便恢复,把数据库导出放在站点根目录下
  • 部署时把整个项目目录打包上传,包含版本库与本地配置
  • 前端构建产物缺少源码映射清理,暴露源码结构
  • 编辑站点时产生的临时文件与备份副本未删除
  • 多站点共用目录,备份文件落在某个可访问路径下
  • 对象存储桶被设为公开读,备份文件可被直接下载

站内自查

站内自查
find /www/wwwroot -type f \( -name '*.sql' -o -name '*.bak' -o -name '*.zip' -o -name '*.tar.gz' -o -name '.env' \) 2>/dev/null
find /www/wwwroot -type d -name '.git' 2>/dev/null
# 同时核对 Web 日志中是否存在对这些路径的请求
# 日志里出现备份文件请求说明可能已被他人尝试获取,需要重点核实

访问层兜底(nginx)

访问层兜底(nginx)
location ~* \.(sql|bak|zip|tar|gz|log|env|old|swp)$ {
    deny all;
}
location ~ /\.git {
    deny all;
}
# 规则要覆盖常见变体:.sql.gz、.tar.gz、.zip、.7z 与备份类后缀
# 访问层拒绝只是兜底,不能替代把文件移出可访问目录

排查项与处理动作

排查项风险处理动作
备份文件全量数据可下载移出站点目录,改用鉴权下载
配置文件数据库与接口凭据泄露移出目录并轮换已暴露口令
版本库目录源码与提交历史泄露删除并调整部署方式
临时与编辑器文件源码片段泄露清理并加入部署检查项
源码映射文件前端源码可还原按需保留或限制访问
备份文件应存放在 Web 根目录之外,用带鉴权的下载通道获取;访问层拒绝规则只是兜底,不能替代目录治理。
确认文件已暴露后,处置不止是删除文件:泄露过的数据库口令与密钥都应视为已泄露并轮换,同时核查日志判断是否被下载。

易错点

  • 只在 nginx 里拦了 .sql 后缀,未处理 .sql.gz、.bak、.zip 等变体
  • 删除文件就结案:已泄露的凭据仍需轮换,日志也要核查是否被下载
  • 备份与站点放在同一目录:一次误操作就可能让全量数据可访问
  • 忽略对象存储:桶权限为公开读时,备份文件等同于公开下载
  • 部署脚本长期打包本地目录:会把版本库与本地配置一起上传,应在构建阶段排除
  • 多站点或多环境漏查:同一台服务器上的其他站点目录同样需要扫描

数据来源与参考

  • OWASP WSTG(备份文件与敏感文件测试)
  • nginx 官方文档(deny 指令)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌