跳到主要內容
← 回找工具
現場紀錄

密碼擋住了畫面,檔案早就送出去了

頁面一開啟要求輸入密碼,看起來像上了鎖。但那個密碼是在瀏覽器裡驗的——檔案已經完整傳到訪客電腦上了,他不需要密碼就能看裡面有什麼。

2026-09-18 · 作者整理:Lucas

我做了一支只給家人用的東西,前面加了密碼。打開網址會跳出輸入框,密碼對了才進得去。

看起來是鎖上了。我拿一個完全沒有登入、沒有密碼的請求去抓同一個網址,想確認它會擋我。

一個「上了鎖」的頁面
──────────────────────────────────────────
  狀態碼          200
  實際傳回        371,434 bytes
  頁面裡出現密碼字樣   2 次
──────────────────────────────────────────
  沒有帳號、沒有密碼,整份都拿到了

我以為發生了什麼

我以為密碼是一道門。門後面的東西,沒鑰匙的人看不到。

這個直覺來自現實世界,也來自平常用的那些需要登入的服務——你沒登入,伺服器就不給你資料。

實際發生了什麼

2026-09-18 實測。用一個沒有任何身分的請求去抓,回 200,而且傳回 371,434 位元組——整份檔案,一個字都沒少。

密碼輸入框確實跳出來了,因為那段驗密碼的程式就在這 371,434 位元組裡面。它是頁面的一部分,不是頁面的門。

換句話說:訪客的電腦已經拿到全部內容了,然後那份內容自己跑了一段程式,決定要不要顯示給他看。他不看畫面、直接讀檔案,密碼那一關根本不在路徑上。

我另外查了那個專案的設定,倉庫本身標的是公開。這一點沒有矛盾——它本來就是公開的,我只是以為密碼改變了這件事。

官方文件寫了嗎

有寫,而且寫得很清楚:這個服務的用途就是「把檔案放上網給人看」。它從來沒有承諾過存取控制,文件裡也沒有「私密頁面」這種功能。

沒有被寫出來的是這件事的反面——文件說明了它做什麼,不會特別說明它不做什麼。 而「不做存取控制」剛好是你最需要知道、卻最容易自己補上想像的那一條。

你一定會踩的那個細節

這是守門守錯對象的典型:密碼守的是畫面,你以為它守的是檔案

兩者的差別只有在「有人不看畫面」的時候才會顯現,而那正是你最不希望被看到內容的那種人。

要分辨一個頁面是真的擋住了還是只擋了畫面,看一件事就夠——沒有身分的請求,伺服器給了你多少東西:

拿一個乾淨的請求去抓那一頁,只看兩個數字:

  1. 狀態碼
     401 或 403 → 伺服器真的擋了
     200        → 伺服器給了,鎖在前端

  2. 傳回的位元組數
     跟正常開啟時差不多 → 整份都給了
     很小(幾 KB)      → 只給了一個登入殼

狀態碼 200 又傳回完整大小,就代表內容已經在
對方電腦上,接下來發生什麼都不是你能控制的。

真的不能外流的東西,只有一種做法:讓伺服器在確認身分之前就不要把它送出去。前端能做的是體驗,不是防護。

站內延伸

來源: 以無身分請求抓取一個 GitHub Pages 站台,記錄 HTTP 狀態碼與回應大小;並以 GitHub API 查詢該倉庫的公開狀態,2026-09-18 實測。

問「這個鎖擋得住嗎」之前,先問一個更前面的問題:東西是在哪一台電腦上被擋下來的。答案是「在對方的電腦上」,那就不是擋,是請求對方不要看。

← 看更多找觀念文章
取得 AI 實戰工具與更新

之後會不定期整理:新方法、指令包(Prompt Pack)、Checklist 與模板。免費、無廣告;送出後會收到一封確認信,點了連結才算訂閱成功,之後每封信都附一鍵退訂。