不少站点被拖走資料、被搜尋引擎索引到不该出現的頁面,起点並不是什么高明的攻击,而是一個地址:把它敲進浏览器,文件就下载下来了。這類問题通常發生在開發、改版、迁移的過程中,做完之後没人回头清理,于是备份包、配置文件和測試脚本就一直躺在網站根目錄下面。
先看常见暴露清單
自查可以從下面這些路径開始,它們出現的概率遠高于想象:
- 版本控制目錄:.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 里没有指向它的連結;如果已经被收錄,可以在搜尋资源平台提交移除請求,同时依靠重新抓取逐步更新索引狀態。
上线前检查清單
- 確認網站根目錄及子目錄下没有压缩包、SQL、CSV 等導出文件。
- 確認 .git、.svn 等目錄已刪除或已被服務器規則拦截。
- 检查配置文件及其 .bak、.old 副本是否可訪問。
- 清理解压後遗留的安装目錄、測試頁面、示例文件。
- 確認目錄索引已關閉,上传目錄訪問不出現文件列表。
- 检查 robots.txt 中是否泄露了具体文件名或内部目錄。
- 把這几項加入日常巡检,尤其在改版、迁移、換服務器之後复查一次。
這類自查花不了多少時間,但能把一個非常直接的風險挡在门外。對站点运营来说,它同时保護了两件事:訪客看到的内容邊界,以及蜘蛛愿意花在有效頁面上的抓取額度。