蜘蛛抓取的范围通常比我們预想的要宽。除了栏目頁、文章頁和站点地图里列出的地址,服務器上一些本不该出現在公開目錄中的文件,也可能因為一次誤传、一次打包、一次临时調试而留在可訪問路径下。平时没有用戶會去訪問它們,但訪問日誌里偶尔會留下抓取的痕迹。這類問题不影响正常訪問,所以很容易被長期忽略。
先弄清哪些文件容易留下来
下面這些類型在中小站点里出現频率較高,可以對照自己的服務器目錄過一遍:
- 临时與备份文件: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 根目錄。
- 上传、备份、日誌尽量走獨立存储,不要图方便放在站点目錄下。
- 部署流程里加一步清理临时文件,避免每次發版都留下新副本。
- 把目錄检查排進日常巡查,新上线的功能往往會带進新的残留路径。
這類問题的特点是:不影响用戶正常訪問,也不影响頁面顯示,所以往往要等到有人翻到才被發現。它更像是一種日常卫生习惯,靠一次集中清理解决不了,靠固定节奏的巡查才比較稳。
如果你的站点结构比較简單,可以從备份包和版本控制目錄這两類開始查,通常几分钟就能看出结果。之後再逐步把目錄列表、上传目錄和日誌文件的检查固定下来,形成一份可以重复执行的清單即可。