
「諸位請入座。寡人昨日與諸位探討了『共享倉庫』遭竊的始末,今日我們要向內審視。昨日是防範他人之失,今日則是檢視己身之漏。今日研習的主題是:『Vibe Coding 狂潮下的裸奔網站 —— 檢查你的網站是不是沒門也沒鎖?』」
【破題導入:能動的網站,就安全嗎?】
如今 AI 盛行,諸位只需半個時辰,便能以「用嘴寫程式」(Vibe Coding)造出一個看似完美的網站。然而,有資安研究揭露了一項駭人聽聞的數據:網路上用 AI 打造出來的網站中,光是完全不設防、任何人皆可長驅直入的「裸奔網站」便高達五千個。其中更有四成裝著諸如醫療紀錄、金流、公司內部簡報與個人資料等機敏之物,連搜尋引擎都能直接索引。這並非駭客攻破了城池,而是造城之人根本忘了安上城門,搜尋引擎一來,便將城內底細看得一清二楚。
【逐步拆解:你為何親手將城門打開?】
寡人常言,治國有其體制,築城亦有其層次。網站安全可分為三層:
第一層是基礎設施,猶如抵禦外侮的城牆(如防護 DDoS 與 HTTPS 憑證),多數雲端平台(如 Vercel, Zeabur)已替諸位建好。
第二層是部署設定,如我們昨日提過的環境變數,平台通常會提供一鍵部署的妥善設定。
第三層,則是諸位親手寫下的程式碼邏輯,這百分之百是諸位自己的責任,沒有任何平台幫得上忙!若你在第三層出了差錯,即便外圍城牆再堅固,賊人依然能堂而皇之地走進大殿。
那麼,大家最常在第三層犯下什麼錯呢?
一、致命的前綴陷阱
諸位在使用 AI 撰寫程式時,AI 為了讓功能順利運作,常會教你在變數名稱前加上 NEXT_PUBLIC_(若使用 Next.js 框架)或 VITE_(若使用 Vite 框架)。諸位切記,這兩個前綴的意義,便是「將此資料公開給全世界」!一旦加上,網站打包時,這些藏著你 AI 金鑰(API Key)的字串就會被直接送到瀏覽器。這無異於將寡人的玉璽直接貼在城牆上,任何人只要來到你的網站、檢視網頁原始碼,不需懂程式也能輕易盜取並假冒你的身分去使用服務。
二、資料庫的「假保護」與萬能鑰匙
諸位愛用的雲端資料庫(如 Supabase)通常配有兩把鑰匙:供公開使用的 anon_key,以及能繞過所有規則的萬能鑰匙 service_role_key。AI 有時為了求快,會建議你將萬能鑰匙直接放進前端程式碼中,這等同於把資料庫的管理員帳號公開貼在網站上,雖然網站動得很順,卻極度危險。
此外,若你在資料表的標籤上看到「Unrestricted」,便代表這張表未設任何保護。這意味著任何拿到你專案網址的陌生人,都能無限制地讀取、竄改甚至刪除整張表的資料!有時即便設了保護規則,AI 也常寫出「永遠成立」的假條件,形同虛設。
【實務點撥:今日大眾實踐,F12 鍵盤大考驗】
學問貴在實踐。現在,請諸位打開你自己或常用的 AI 工具網站,寡人要親自帶你們進行兩項安檢:
Command + Option + I)。接著切換到 Network(網路) 分頁,並重新整理頁面。請在搜尋欄輸入 "sk-"(此為多數 AI 金鑰的開頭)。若你在這裡搜出了金鑰,便代表任何點進你網站的人都能看見。【提問與激勵:知危圖安】
諸位同仁,莫要以為 AI 幫你寫出能順利運作的網站,便是安全的。安全與便利,往往需要諸位多留一份心眼。現在就去查驗你們的心血結晶吧!若在檢驗時搜出了不該出現的金鑰,切莫慌張,明日寡人將親自傳授「守護錢包的黃金應變之法」。
諸位若在檢視「F12」時遇到任何窒礙難行之處,或對資料庫權限有所疑惑,但說無妨,寡人與諸位一同探討!