網站為什麼怕「被掃路徑」:頻繁 404 和猜介面,不是無害噪音
打開存取日誌,最刺眼的往往不是正常使用者,而是一長串根本不存在的網址。它們在很短的時間裡換著路徑進來,絕大多數以 404 結束。很多人的第一反應是:打不開就沒出事。對公開網站來說,這種掃描本身就是風險,頻繁 404 也不是可以忽略的背景噪音。
掃描在找什麼
路徑掃描是自動化程式按常見目錄、檔名和介面命名,逐個向網站發出請求,用來判斷這個網址是否存在、由什麼程式處理、回傳了什麼。它不依賴你公開的導覽,而是在猜:管理入口、安裝殘留、備份檔、除錯頁面、舊版本目錄,以及形如「資源名稱+動作」的 API。
猜路徑和猜 API 是同一件事的兩面。頁面掃描在找人能打開的入口;介面掃描在找程式之間呼叫的入口。後者往往沒有選單、沒有驗證碼,權限也更容易被做成「只要知道網址就能用」。
404 多,不代表沒有資訊
一次 404 只說明這個網址目前沒有對應內容。成千上萬次有規律的 404,說明有人在繪製你的網站地圖,而且已經開始對照「哪些像真的、哪些是猜的」。
回應本身會洩漏差異。有的網址回傳統一的「找不到」,有的回傳框架預設錯誤頁,有的回傳「未登入」或「沒有權限」,有的回傳參數錯誤。這些差別等於在告訴對方:這條路徑背後有真實功能,只是現在進不去,或者參數不對。掃描程式會把「不存在」和「存在但被拒絕」分開,下一輪就集中打那些被拒絕的網址。
錯誤頁若帶上框架版本、檔案路徑、堆疊或資料庫報錯,等於把技術架構和目錄結構一併交了出去。對方不必攻破任何東西,光靠你自己的報錯就能縮小範圍。
猜中一次,就夠用很久
網站上線後會留下很多「人不用、程式還在」的入口:已下線的活動頁、測試環境拷進正式環境的目錄、忘記刪掉的安裝指令碼、可下載的備份和匯出檔、只給內部呼叫卻沒有鑑權的介面、舊版 API 仍掛在原路徑上。正常使用者不會走到這些地方,掃描會專門找它們。
猜中管理入口,風險是撞庫和未授權操作。猜中備份或設定檔,風險是帳號、金鑰和資料庫連線資訊外洩。猜中除錯或狀態介面,風險是內部結構、使用者資料和運行狀態被直接讀走。API 尤其容易被低估:頁面上做了登入,介面卻只校驗了「請求長得像合法呼叫」。網址一旦被猜到,就可能繞過你在網頁上加的那一層限制,批次讀取或修改資料。
這類問題很少在第一次掃描時就變成新聞。常見過程是:先用 404 把假網址濾掉,再對回傳 401、403、405 或參數錯誤的網址做確認,最後只打那幾條真正存在的路徑。日誌裡前期幾乎全是失敗,真正的損失集中在少數幾次「猜對了」。
頻繁 404 本身就會傷到業務
即使一條都沒猜中,高頻率的無效請求也有代價。
伺服器、頻寬、CDN 和防火牆都在為這些請求工作。掃描往往來自大量位址、帶著不同的標頭,規則鬆的防護會被正常流量和垃圾流量一起放進來。來源站要為每個 404 查路由、跑應用、寫日誌。量上來之後,CPU、連線數和磁碟都會被占住,真實使用者的開啟速度跟著變差。
日誌會被淹沒。安全設備若把每一條 404 都告警,值班的人很快就會把告警當成常態;若為了省事直接忽略 404,真正的撞庫、越權和資料拉取也會混在裡面看不見。攻擊方甚至會先用路徑掃描把告警打滿,再在同一時間做別的事。
帳單也會漲。按請求計費的 CDN、WAF 和日誌服務,會把無效掃描算進費用。小站一天多幾千條可能無感,面向公網的業務介面被連續打幾天,儲存和清理成本就很具體。
搜尋引擎和監控同樣會受影響。大量異常狀態碼會拉高錯誤率,把可用性圖表做成「網站一直不健康」。若錯誤頁被錯誤地快取,正常網址也可能在一段時間內被當成不存在。
介面被猜中的業務後果
API 一旦被確認存在,後續就不再是「看看有沒有這個網址」。未授權的查詢介面會造成使用者資料、訂單、庫存或內部設定外洩;未授權的寫入介面會造成資料被改、被刪或被灌入垃圾內容。舊版本介面常常保留舊的校驗邏輯,新版本修好的問題在舊路徑上仍然有效。
對需要等保、隱私合規或對外承諾可用性的團隊,這類事件要同時面對三件事:資料是否已經離開系統、業務是否被竄改、日誌能不能證明影響範圍。路徑掃描階段如果沒有留下可檢索的記錄,事後往往只能估計,不能界定。
網站側應先擋住什麼
處理這件事,重點不是去和掃描程式比誰猜得快,而是讓「猜」變得沒有收穫,並讓異常流量蓋不住真正的問題。
對外只保留仍在使用的頁面和介面,下線功能要連路由一起撤掉,而不是只從選單裡隱藏。測試目錄、安裝殘留、備份和匯出檔不要放在網站可存取的路徑下。所有介面預設需要身分和權限,不能因為「網址沒有公開」就當作保護。管理入口、除錯介面和狀態頁不要暴露在公網;必須保留時,應限制來源並單獨稽核。
錯誤回應保持一致。不存在、未登入、無權限可以回傳不同的業務狀態,但不要在頁面或 JSON 裡帶上實體路徑、版本號、堆疊和 SQL。讓掃描程式無法靠報錯差異判斷「這條介面是真的」。
對同一來源的高頻未知路徑做限速和暫時封鎖,把明顯的掃描擋在應用之前。日誌按路徑聚合,關注短時間內大量不同路徑,以及 401、403、500 的突增,而不是對每一條 404 發一條告警。給真實介面建一份清單,存取記錄裡出現清單之外的路徑,就當作異常,而不是正常的「使用者走錯了」。
CDN 和防火牆只適合擋住明顯的垃圾流量,不能代替權限。一個被猜中的介面,只要沒有鑑權,防護規則放行它是正常的,因為它看起來就像一次普通的 API 呼叫。
怎麼判斷自己是不是正在被掃
可以先看這幾類現象:大量來自少數位址段的請求,路徑彼此不相似,卻在短時間內均勻出現;使用者代理空、過舊,或同一來源使用大量不同代理;404 之外夾雜少量 401、403、405 和 500,且這些網址從未出現在你的頁面或文件裡;某個不存在的目錄被反覆請求,只是檔名在變。
出現這些現象,不表示已經失陷,但表示有人在測量你的網站。此時要核對的是:回傳差異裡有沒有技術細節、那些非 404 的網址是不是真介面、這些介面沒有登入時會不會回傳資料。
結語
路徑掃描的危害不在於 404 這個狀態碼,而在於它用很低的成本試探整站:哪些網址是活的,哪些錯誤會說話,哪些介面忘了上鎖。頻繁 404 會抬高成本、淹沒告警,猜中的那一次則可能直接碰到備份、管理入口或未授權 API。
把不用的路徑刪掉,把錯誤資訊收乾淨,把介面一律當成公開入口來做權限,掃描才會停留在「大量失敗」,而不是變成一次資料或權限事故。