很多站点的暴露不是被攻破,而是自己把文件摆在了公開目錄里。备份包、編輯器临时文件、版本控制目錄、資料库導出脚本,只要放在網站根目錄下,任何人訪問對應 URL 都能直接下载。日常巡检时,把文件權限與目錄列表当成固定動作,能省掉不少後患。
先弄清常见的暴露来源
大部分意外暴露都来自几類固定文件,可以在巡检时按類別過一遍:
- 整站或資料库备份:www.zip、site.tar.gz、db.sql、带日期的备份包。
- 編輯器與系統临时文件:.index.php.swp、style.css.bak、以 ~ 结尾的文件。
- 版本控制與部署残留:.git/、.svn/、.env、部署脚本里带的示例配置。
- 調试頁面:info.php、test.php、phpinfo 輸出頁。
- 服務器目錄列表本身:目錄里没有預設首頁时,服務器把文件清單直接列出来。
自查一:訪問目錄,看它會不會列出文件
挑几個没有預設首頁的目錄,直接訪問目錄地址,例如 /uploads/、/backup/、/static/,观察返回内容。如果看到文件清單,說明目錄索引開着。
怎么關
- Nginx:確認没有開啟 autoindex on,預設即為關閉。
- Apache:在對應目錄配置中去掉 Indexes,寫作 Options -Indexes。
- 兜底做法:在没有預設首頁的目錄放一個空的 index.html。
關掉之後重新訪問一次,確認返回的是 403 或 404,而不是 200 加一串文件名。
自查二:把可疑路径挨個敲一遍
這一步不需要工具,浏览器地址栏就够,重点是把常见的文件名试一遍:
- 在網站根目錄地址後依次加上 /backup.zip、/www.zip、/db.sql、/.git/config、/.env,看是否直接返回文件内容。
- 返回 200 且有内容,就要立刻處理:要么删掉,要么移到網站根目錄之外。
- 如果這些路径曾被搜尋引擎抓取過,刪除後還應观察一段時間日誌,確認没有繼續被請求。
需要注意,這類检查只适用于自己管理的站点,批量掃描別人的站点既不礼貌,也可能触碰法律邊界。
自查三:文件權限與目錄归属
權限设得過松,等于给上传目錄開了後门;设得過紧,又會出現图片不顯示、程序無法寫入的問题。常见的安全基线是:
- 目錄 755,文件 644,不要图省事设成 777。
- 資料库配置文件、私钥文件放在網站根目錄之外,只允许執行用戶讀取。
- 上传目錄、缓存目錄單獨划分,並禁止执行脚本,只允许讀取静態文件。
- 執行網站的用戶與拥有網站目錄的用戶分開,减少被寫入後直接执行的机會。
自查四:把清理做成流程
靠人记得住並不現實,更稳妥的做法是把它寫進固定流程:
- 打包备份统一放到站点目錄之外,需要下载时通過單獨入口获取。
- 部署脚本最後加一步清理:刪除 .git、.svn、临时文件與測試頁。
- 上线检查清單里加三條:能不能列目錄、可疑路径能不能下载、權限是否合規。
- 每月做一次全量巡检,平时以上线後抽样為主。
服務器上的公開目錄,就像没有上鎖的抽屉。里面的東西未必重要,但被路過的人随手拉開看一眼,總归不是好事。
巡检节奏建议
- 每周:翻一次訪問日誌里的 404 高频路径,出現大量陌生路径請求时留個心。
- 每月:按上面四步走一遍,重点看新增了哪些备份和临时文件。
- 每次上线後:抽查目錄列表與常见敏感路径,確認新增内容没有留下口子。
這些检查花不了多少時間,但能避免某天突然發現資料库备份在網上挂着這類麻烦。