路徑遍歷是指在檔名欄位中混入 ../,就能讀到伺服器深處 .env 的漏洞。本文講解其原理與可靠的防範方法(不會寫出攻擊步驟)。
會出現在哪裡
凡是「用使用者輸入來選擇檔案」的地方都是候選。
| 功能 | 危險的用法 |
|---|---|
| 下載/預覽 | 把 ?file= 中的檔名原樣使用 |
| 圖片/附件的顯示 | 用 URL 參數拼出路徑的一部分 |
| 上傳 | 在保存目標路徑中使用使用者指定的名字(寫入型·最危險) |
| 範本/語言檔案讀取 | 用 ?lang= 等動態選擇檔案 |
為什麼會成立(原理)
../ 表示「向上一級目錄」。當應用程式把 公開資料夾 + 使用者輸入 原樣串接起來開啟檔案時,用疊加了 ../ 的輸入就能存取到公開資料夾之外的檔案。
讀取會導致資訊外洩,寫入(上傳)則會被在任意位置放置檔案,有時還會發展為 RCE。
防禦:不把輸入用作路徑 + 限制在基準內
不把使用者輸入用作生檔案路徑(最重要)
要公開的檔案用 ID→實際檔案的對應表(白名單)來查。使用者傳入的只是「第 3 號」「invoice」等識別碼,實際路徑由伺服器決定。
正規化之後,務必確認「是否在基準目錄的內側」
用語言標準的路徑正規化(相當於 resolve/realpath)轉換為絕對路徑,並校驗它是否以所允許的基準目錄開頭。在外面就拒絕。../ 的簡單字串刪除存在編碼繞過,因此不可取。
以最小權限執行應用
把應用執行使用者能讀取的檔案收窄到業務所需的範圍。即便萬一被逃出,只要本來就讀不到,就不會產生危害。
把「不該交出的東西」放到公開根目錄之外
.env·.git·金鑰·備份,本來就不要放在 Web 根目錄或上傳資料夾裡。光靠放置位置,就能消除可被攻擊的對象。
本站的視角:它與放置位置的失誤屬於同一類問題,請按正確順序修正
路徑遍歷與 .env 公開的事故屬於同一類問題。兩者都是「本不該經由 Web 送達的東西,卻經由 Web 送達了」。暫時措施(回應標頭或簡單過濾)只能遮住表面,只要程式碼和放置位置沒修好,就會從別的路徑外洩。順序是①不把輸入用作路徑的程式碼 ②基準目錄內的檢查 ③根本上把祕密挪到公開根目錄之外。再配合閱讀 在共享租用伺服器上的安全設定,就能了解根本對策的做法。
與相似問題的區別
結果看起來可能相同——「本該不公開的檔案能從外部讀到」——但原因決定了該在哪裡修正。
| 問題 | 原因 | 修正的地方 |
|---|---|---|
| 路徑遍歷 | 指向檔案的輸入能逃出允許的位置 | 應用程式碼(不把輸入用作路徑) |
| 本機檔案引入(LFI) | 輸入選擇了程式要載入並執行的檔案 | 應用程式碼(固定可載入的檔案) |
| 檔案留在公開目錄 | .env 或 .git 放在 Web 看得到的地方(→ 留在公開目錄的祕密) | 檔案的放置位置與 Web 伺服器設定 |
| IDOR | 檔案 ID 格式正確,卻能指向別人的檔案 | 應用的權限檢查 |
實際案例:Web 伺服器本身的缺陷
路徑遍歷不只出現在自製的應用中,也出現在被廣泛使用的產品裡。
- Apache HTTP Server 2.4.49(2021):存在路徑遍歷缺陷(CVE-2021-41773),Apache 專案表示已知它在外部遭到利用。2.4.50 修正了它,但修正不完整(CVE-2021-42013),於是在 2.4.51 再次修正。依設定不同,它不只導致檔案讀取,還會導致 RCE。
- WordPress 核心(2026):解析頁面範本的程式碼中的路徑遍歷,導致了在特定條件下可達 RCE 的檔案引入缺陷(CVE-2026-87902)(→ CVE-2026-87902 解說,英文)。
2024 年 5 月,美國 CISA 與 FBI 發出警示,要求製造商消除這類缺陷。據其說明,當時 CISA 的 KEV(確認已被利用的漏洞清單)中有 55 個目錄遍歷漏洞。在 MITRE 於 2025 年 12 月公布的「CWE Top 25」中,路徑遍歷(CWE-22)排名第六。
如何檢查自己的網站
找出接收輸入的檔案操作
在程式碼中搜尋開啟或傳送檔案的函式(open、readFile、sendFile、include 等),或組裝路徑的函式(path.join 等),看請求的值是否可能傳到那裡。
確認檢查的順序
在使用輸入的地方,確認是先正規化路徑(path.resolve 或 realpath),之後才檢查它是否在基準目錄內。如果程式碼只在正規化之前檢查字串,就修正順序。
確認 Web 伺服器與產品的版本
確認你沒有在執行有已知路徑遍歷的版本,例如 Apache 2.4.49 或 2.4.50。CVE / KEV 查詢可以顯示所用產品的已知漏洞。
確認不該被看到的檔案
用網站健檢確認 .env、.git 與資料庫傾印檔無法從外部讀取。若可以讀取,請把放置位置當作與路徑遍歷不同的另一項工作來修正。
出處(一手資料)
- CISA 與 FBI, "Secure by Design Alert: Eliminating Directory Traversal Vulnerabilities in Software"(2024 年 5 月 2 日)— cisa.gov(KEV 中有 55 筆、使用隨機識別碼)
- Apache HTTP Server, "Apache HTTP Server 2.4 vulnerabilities" — httpd.apache.org(CVE-2021-41773、CVE-2021-42013)
- MITRE, "2025 CWE Top 25 Most Dangerous Software Weaknesses"(2025 年 12 月)— cwe.mitre.org(CWE-22 排名第六)
- OWASP, "Path Traversal" — owasp.org
- IPA「安全なウェブサイトの作り方」(日文)— ipa.go.jp(未檢查的路徑參數/目錄遍歷)
接下來閱讀
- 事故:把 .env 整個公開出去的事故
- 對策:租用伺服器上的 .env 保護 / 術語:RCE 是什麼