蜘蛛抓取的范围通常比我们预想的要宽。除了栏目页、文章页和站点地图里列出的地址,服务器上一些本不该出现在公开目录中的文件,也可能因为一次误传、一次打包、一次临时调试而留在可访问路径下。平时没有用户会去访问它们,但访问日志里偶尔会留下抓取的痕迹。这类问题不影响正常访问,所以很容易被长期忽略。
先弄清哪些文件容易留下来
下面这些类型在中小站点里出现频率较高,可以对照自己的服务器目录过一遍:
- 临时与备份文件:index.php~、index.php.bak、xxx.php.old、.index.php.swp 等编辑器或同步工具生成的副本。
- 整站或数据库备份包:www.zip、backup.tar.gz、db.sql、导出文件等,一旦放在 Web 目录下,等于把整份数据公开。
- 版本控制目录:.git/、.svn/、.hg/,部分目录还能被直接列出文件清单。
- 环境与配置:.env、config.php.bak、含连接信息的配置文件副本。
- 日志与缓存:access.log、error.log、程序生成的 runtime 或 cache 目录。
- 程序自带说明:readme.html、changelog.txt、install/ 安装目录、test.php 之类的探测脚本。
判断标准很简单:这个路径如果被一个陌生人打开,是否会暴露额外信息或带来风险。会,就不应该留在公开目录里。
目录列表(autoindex)是另一个常见入口
当服务器开启了目录索引功能,访问一个没有默认首页的目录时,会直接返回该目录下的文件名列表。对蜘蛛来说,这相当于一份自动生成的链接清单,可能顺藤摸瓜发现更多本不该出现的地址。
检查方式很直接:在浏览器里依次访问 /uploads/、/images/、/static/、/data/ 这类常见目录,观察是否返回文件列表页。如果返回了,说明该目录没有默认文档且索引功能是打开的。处理办法是关闭 autoindex,并在必要的目录下放置一个空的 index 文件,或由程序自己控制首页输出。
后台、接口与上传目录
后台登录页、内部接口路径、上传目录通常不希望被索引。这里需要提醒一句:在 robots.txt 里写 Disallow 只是请求抓取方不要访问,并不能阻止地址被别人打开。真正的保护来自访问控制,例如 IP 白名单、账号鉴权、限速与验证码、把后台路径与主站分离。
上传目录则要额外注意执行权限,避免有人上传脚本后直接运行。把上传目录与程序目录分开存放,通常比事后排查省事得多。
一套可以照做的自查步骤
- 拉取近期访问日志,筛出那些你从没印象发布过的路径,逐个确认来源。
- 用搜索引擎的 site: 查询配合 filetype:、inurl: 等条件,看看是否出现了不该公开的文件类型。注意不要频繁查询。
- 对常见敏感路径发一次 HEAD 请求,看返回的状态码是 200 还是 403/404,重点关注 200。
- 维护一份"允许公开"的目录清单,与服务器实际目录结构做比对,多出来的部分逐个判断。
- 检查服务器配置中的目录索引开关、目录权限和默认文档设置。
处理原则与长期习惯
- 无用的文件直接删除;暂时还要保留的,移出 Web 根目录。
- 上传、备份、日志尽量走独立存储,不要图方便放在站点目录下。
- 部署流程里加一步清理临时文件,避免每次发版都留下新副本。
- 把目录检查排进日常巡查,新上线的功能往往会带进新的残留路径。
这类问题的特点是:不影响用户正常访问,也不影响页面显示,所以往往要等到有人翻到才被发现。它更像是一种日常卫生习惯,靠一次集中清理解决不了,靠固定节奏的巡查才比较稳。
如果你的站点结构比较简单,可以从备份包和版本控制目录这两类开始查,通常几分钟就能看出结果。之后再逐步把目录列表、上传目录和日志文件的检查固定下来,形成一份可以重复执行的清单即可。