洩漏金鑰掃描器
洩漏金鑰掃描器檢查那些本不該公開的檔案和憑據是否能被任何人從你的網站上取走:裝著資料庫密碼的 .env 檔案、會交出全部原始碼歷史的 .git 資料夾、遺留在 Web 根目錄的備份壓縮包,或者藏在 JavaScript 包裡的真實 API 金鑰。輸入一個 URL,本掃描器會探測常見暴露路徑、驗證任何有回應的內容,並掃描頁面及其腳本中的已知金鑰模式——只顯示遮罩後的值,絕不顯示金鑰本身。配套指南暴露的 .env 檔案與洩漏金鑰解釋這類暴露如何發生,以及為什麼光刪檔案永遠不夠。建議與為回應加固評分的安全標頭深度檢查、以及稽核第三方腳本的第三方腳本稽核搭配使用。
最後更新:
想持續監控這個網站?用 myeventwatch 免費監控——到期和停機提醒,無需綁卡。
什麼算暴露——什麼不算
掃描器用普通的公開 GET 請求探測一份公佈的常見路徑清單——/.env 及其常見變體、/.git/HEAD 與 /.git/config、設定檔、備份壓縮包和金鑰檔案——正是攻擊者、搜尋引擎或好奇的訪客能發出的同種請求。一個路徑只有當回應內容與該檔案應有的樣子相符時才算暴露:env 檔案必須能解析為鍵值行,Git HEAD 必須長得像 Git 參照。許多伺服器對每個路徑都回答 200——單頁應用回退、自訂錯誤頁、全捕獲重寫——而一個裝著你首頁 HTML 的 200 不是洩漏。這類路徑會在結果中單獨列為有回應但未確認,供你自行判斷;本工具絕不把未確認的 200 稱為洩漏,你使用的任何掃描器也都不應該這樣做。
在檔案探測之外,掃描器還會抓取頁面本身以及最多約十五個 JavaScript 包,在其中搜尋已知金鑰形態:雲端存取金鑰 ID、私鑰頭、通用 API 金鑰與權杖賦值、資料庫連線字串等高訊號模式。用戶端程式碼按定義就是公開的——傳送到瀏覽器的任何東西都能被每個訪客讀取——所以在包裡找到的真實憑據,即使沒有任何檔案設定錯誤,也已經暴露。發現結果按類型、來源檔案和出現次數報告,其值最多遮罩到只剩前四個字元:足夠你認出是哪把鑰匙,永遠不足以讓報告的讀者拿去使用。完整的金鑰從不被取入、儲存或顯示在這份報告中。
局限,明說在前面
這是一次公開的、唯讀的常見路徑探測,它的局限是結果的一部分。它只請求公佈清單上的路徑——放在異常檔案名裡的金鑰不會被找到。它掃描落地頁和粗略十五個腳本包,而不是大型站點的每個資源,並且不會登入、不在認證後爬取、不爆破檔案名,也不測試任何未經認證 GET 本就夠不到的東西。掃描限速為每位訪客每小時 5 次,結果快取10 分鐘,因此該窗口內的重掃可能顯示快取結論。掃描也有時間預算:慢目標用完預算時,結果會標為部分並明說——請把部分乾淨結果理解為「未完整檢查」,而不是「乾淨」。
如果掃描發現了問題,工作的順序比刪除的速度更重要。先輪換憑據——撤銷已暴露的金鑰並簽發新金鑰——因為副本可能已經存在於快取、歸檔和別人手裡;刪除檔案只能停止新的下載,對已經流出的金鑰毫無作用。然後在伺服器上移除或封鎖該檔案,清除可能存有副本的 CDN 與代理快取,並檢查存取記錄中對同一路徑的更早請求。配套文章暴露的 .env 檔案與洩漏金鑰按順序走完攻擊者使用的第一小時手冊和完整的復原流程。
相鄰的檢查補全畫面:第三方腳本稽核覆蓋你的頁面載入的外部腳本——那是與自有檔案洩漏不同的供應鏈風險——安全標頭深度檢查則為你的回應所攜帶的瀏覽器保護評分。關於方法的一點說明:乾淨結果意味著在掃描時刻、從檢查器的網路位置看,被探測路徑沒有一條以相符內容回應,被掃描檔案中也沒有出現已知金鑰模式。它是關於那些路徑和檔案的證據,並非對整台伺服器的保證——首先就把檔案放在 Web 根目錄之外,並在每次觸及伺服器發布內容的部署變更後重新掃描。
公佈的探測清單
| /.env 及其變體 | 保存資料庫密碼、郵件憑據和 API 金鑰的環境檔案(.env、.env.local、.env.production 等)。只有正文能解析為鍵值行時才確認。 |
| /.git/HEAD 與 /.git/config | 被服務的 .git 資料夾會披露倉庫:HEAD 證明布局,config 常寫著遠端位址。兩者齊備時,完整的原始碼歷史通常可以重建。 |
| 設定檔 | 攜帶明文憑據的常見設定路徑(例如 wp-config 備份、config.php 副本與框架設定檔)。 |
| 備份與歸檔檔案 | 遺留在 Web 根目錄的資料庫轉儲、.zip / .tar.gz 站點歸檔和編輯器備份副本——往往是整站的完整副本,憑據也在其中。 |
| 金鑰與憑證檔案 | 絕不應可經 Web 存取的私鑰形態檔案(.pem、.key、id_rsa 式命名);被服務的私鑰本身就是嚴重發現。 |
| JavaScript 包 | 頁面加上最多約 15 個腳本包,搜尋雲端金鑰 ID、私鑰頭、權杖賦值和連線字串。值最多遮罩到只剩前四個字元。 |
| 確認規則 | 探測只有在回應內容符合預期檔案形態時才算暴露。裸 200 列為有回應未確認,絕不報告為洩漏。 |
| 預算與快取 | 僅公開 GET 探測、唯讀,每位訪客每小時 5 次掃描,結果快取 10 分鐘。用完時間預算的掃描標為部分。 |
常見問題
掃描說某個路徑「有回應但未確認」。那是洩漏嗎?
就這份證據而言不是。它意味著該路徑以 HTTP 200 回應,但內容與被探測檔案的形態不符——通常原因是全捕獲路由或回退頁對每個 URL 都返回你的首頁或應用外殼。在無痕窗口裡自己開啟該路徑,看真正返回什麼:若看到真實檔案內容,按暴露處理;若看到正常網站,那只是回退。
掃描器找到了我的一把金鑰。我先做什麼?
先輪換它——撤銷已暴露的憑據並簽發替代品——在做任何其他事之前。公開檔案的副本會迅速逃進快取、歸檔和掃描器的資料庫,所以刪除檔案並不能讓金鑰「取消洩漏」。然後移除或封鎖檔案,清除 CDN 與代理快取,審查該路徑的存取記錄,並檢查同一憑據還被用在別處沒有。
掃描器會儲存或顯示它找到的完整金鑰嗎?
不會。檢查器只報告金鑰類型、所在檔案和出現次數,值最多遮罩到前四個字元——足夠認出是哪份憑據,永遠不足以使用它。報告裡沒有任何值得偷的東西,這是刻意的:一份洩漏報告不應該變成第二次洩漏。
它能掃描我的預發布站點或登入後的頁面嗎?
不能。掃描器只發出未經認證的公開 GET 請求,所以登入、VPN 或 IP 白名單之後的一切都夠不到——這是刻意的,因為它回答的問題是網際網路上的陌生人能取走什麼。被封鎖的目標(包括本站自身的基礎設施位址)會被直接拒絕。
為什麼我的結果是快取的或部分的?
結果快取 10 分鐘,讓重複檢查更便宜,也讓掃描器在目標伺服器上做個有禮貌的客人;結果會註明何時為快取。部分結果意味著掃描在完成每條探測前撞上了時間預算——通常是慢目標或許多大包——橫幅會說明這一點,部分乾淨結果應重新運行,而不是當作完全乾淨來信任。