.svn 目录暴露是什么
用 SVN 管理源码时,工作副本里会保留版本控制元数据:SVN 1.6 及更早版本在每个目录下生成 .svn/entries,1.7 起只在工作副本根目录保留 .svn(含 wc.db 数据库与 pristine 原始文件副本)。如果把工作副本直接部署成网站目录,这些元数据就可能通过 Web 被读取,源码与提交信息随之泄露。
基本信息
| 核查对象 | .svn 下的 entries、wc.db、pristine 等路径 |
|---|---|
| 风险 | 源码、目录结构与提交者信息泄露 |
| 修复层面 | 清理部署产物 + Web 层拦截 + 发布流程改造 |
| 关联问题 | .git/.hg 残留、备份文件、编辑器临时文件 |
| 验证方式 | 对目标路径发起匿名请求,比对返回差异 |
典型使用场景
- 上线前检查:确认发布包里没有夹带版本控制目录
- 存量排查:对已知站点批量探测常见元数据路径
- 修复验证:清理后复测,确认返回 404 或 403
- 部署流程评审:确认发布方式是导出而非直接复制工作副本
- 历史资产巡检:多年未重整的老站点残留概率更高
检查方式
检查方式
curl -s -o /dev/null -w "%{http_code}\n" https://target.example/.svn/entries
curl -s -o /dev/null -w "%{http_code}\n" https://target.example/.svn/wc.db
curl -s https://target.example/.svn/entries | head -n 20 # 1.6 版本含文件名与版本
curl -s -o /dev/null -w "%{http_code}\n" https://target.example/.svn/all-wcprops
# 判读:200 且内容为 SVN 格式即存在暴露;404/403 为正常
# 只做只读验证,不批量拉取源码内容常见路径与含义
| 路径 | 含义 | 暴露后果 |
|---|---|---|
| .svn/entries | 1.6 及更早的文件清单与版本号 | 文件名、目录结构、提交版本泄露 |
| .svn/wc.db | 1.7 起的 SQLite 工作副本数据库 | 文件清单与校验信息可被解析 |
| .svn/pristine/ | 原始文件副本(.svn-base 后缀) | 配合数据库可还原源码 |
| .svn/all-wcprops | 属性文件,含部分文件名 | 辅助推测项目结构 |
不同客户端版本残留形态差异明显:老站点常是每目录一个 .svn,新版本只在根目录有一个 .svn 目录,因此检查要覆盖常见路径,清理要覆盖整个部署目录树。
漏洞等级取决于泄露内容:仅目录结构通常为中危,能还原完整业务源码或含凭据的配置文件时属于高危,定级要以后续验证结果为准。