站点运营

站点运营:敏感文件与目录暴露自查,别让备份包和配置文件被直接下载

很多站点出问题不是被攻破,而是有一个能直接访问的地址。本文整理备份压缩包、.git 目录、配置文件、日志与导出数据的常见暴露路径,给出目录索引关闭、状态码返回策略、robots.txt 正确用法和上线前检查清单,同时说明这类地址对蜘蛛抓取预算的消耗。

站点运营

站点运营:敏感文件与目录暴露自查,别让备份包和配置文件被直接下载

不少站点被拖走数据、被搜索引擎索引到不该出现的页面,起点并不是什么高明的攻击,而是一个地址:把它敲进浏览器,文件就下载下来了。这类问题通常发生在开发、改版、迁移的过程中,做完之后没人回头清理,于是备份包、配置文件和测试脚本就一直躺在网站根目录下面。

先看常见暴露清单

自查可以从下面这些路径开始,它们出现的概率远高于想象:

  • 版本控制目录:.git、.svn、.hg,一旦可访问,源码历史基本等于公开。
  • 备份压缩包:backup.zip、www.rar、站点名_20240101.tar.gz,以及各种带日期的命名。
  • 配置文件与它的副本:.env、config.php.bak、database.php.old。
  • 编辑器残留:.index.php.swp、index.php~、index.php.save。
  • 数据导出文件:data.sql、users.csv、导出.xlsx。
  • 日志与调试文件:error.log、access.log、phpinfo.php、test.php。
  • 目录本身可列文件:上传目录、附件目录访问后直接出现一长串文件名。
  • 系统生成的小文件:.DS_Store、Thumbs.db,容易暴露目录结构。

怎么查,怎么改

先从状态码看起

逐个猜测路径虽然笨,但有效。可以直接在浏览器里试,也可以用命令行看响应头:curl -I https://example.com/backup.zip。重点看两件事:状态码是不是 200,内容类型是不是压缩包或文本。目录则看是否返回了文件列表页。

关掉目录索引

Nginx 里确认 autoindex off;;Apache 里确认对应目录没有 Options Indexes。很多老站点是因为迁移时复制了默认配置,把目录列表一起带过来了。关掉索引之后,目录会返回 403,但里面的具体文件仍然可能被直接访问,所以还需要单独处理敏感文件。

敏感路径建议直接返回 404

对备份包、.git、.env 这类路径,返回 404 比返回 403 更省心:403 相当于告诉对方“这里有东西,只是不给你看”,404 则让路径看起来不存在。无论选哪种,都不要返回 200 的空页面,那会让普通访客和蜘蛛都以为访问成功。

别让 robots.txt 变成指路牌

一个常见误区是把敏感文件名写进 robots.txt 的 Disallow 里。这样做等于公开告诉所有人:这里有个叫 backup.zip 的文件。robots.txt 是给守规矩的爬虫看的建议,不是访问控制,它既拦不住手动访问,也拦不住不遵守协议的采集程序。

robots.txt 是请求,不是权限。真正的门锁应该配在服务器上,而不是写在一份公开可读的文本里。

这件事和蜘蛛抓取的关系

搜索引擎的蜘蛛在抓取时同样会尝试这些常见路径,有些还会顺着页面上残留的测试链接、附件地址一路爬过去。结果是两方面的浪费:一方面抓取预算被这些低价值地址消耗掉,真正需要更新的内容反而排到后面;另一方面,如果某个敏感地址已经被返回 200 并被索引,用户搜一下就能看到。

已经暴露过的地址建议这样处理:先在服务器层面拒绝访问,让它返回 404 或 410;再确认页面和 sitemap 里没有指向它的链接;如果已经被收录,可以在搜索资源平台提交移除请求,同时依靠重新抓取逐步更新索引状态。

上线前检查清单

  1. 确认网站根目录及子目录下没有压缩包、SQL、CSV 等导出文件。
  2. 确认 .git、.svn 等目录已删除或已被服务器规则拦截。
  3. 检查配置文件及其 .bak、.old 副本是否可访问。
  4. 清理解压后遗留的安装目录、测试页面、示例文件。
  5. 确认目录索引已关闭,上传目录访问不出现文件列表。
  6. 检查 robots.txt 中是否泄露了具体文件名或内部目录。
  7. 把这几项加入日常巡检,尤其在改版、迁移、换服务器之后复查一次。

这类自查花不了多少时间,但能把一个非常直接的风险挡在门外。对站点运营来说,它同时保护了两件事:访客看到的内容边界,以及蜘蛛愿意花在有效页面上的抓取额度。