你用 AI 做了一個小工具。可能是一個報名表單,可能是一個自動整理資料的小程式。你按下執行,它動了。畫面跑出來的那一刻,真的很爽。
然後你想:那我把它放上網吧,給客戶用、給讀者用。
先等一下。能動,跟能上線,是兩件事。
我在對資安要求很高的產業做了十多年開發。這些年看過太多「能動的災難」:功能好好的,示範也順順的,一上線就出事。不是被塞爆,就是資料外洩,或是某天帳單暴增,因為金鑰被人撿走拿去亂用。
AI 讓寫程式的門檻降到史上最低,這是好事。但它沒有降低「出事」的門檻。所以這篇想給你一份上線前的自檢清單,只有五個問題。不用會寫程式,看得懂中文就能檢查。
為什麼 AI 寫的程式碼特別需要這一關
先講清楚一件事:AI 寫的程式碼不是比較爛,它常常寫得比初學者好很多。問題出在別的地方。
AI 只對「你有講的事」負責。你說要一個報名表單,它就給你一個報名表單,功能齊全、畫面漂亮。但你沒說「表單被灌一萬筆假資料怎麼辦」,它多半就不會處理。你沒想到的事,它也不會替你想到。
有寫過程式的人,踩過雷,身上有傷疤,寫的時候會自動避開。用 AI 的你沒有這些傷疤,AI 也不會主動幫你長出來。
這其實就是我常講的 DEL 框架裡的 Limitation:你沒把地雷標出來,AI 就當那裡沒有地雷。所以安全這件事,得靠你主動問。以下五個問題,就是幫你問在刀口上。
我們用一個貫穿的例子:假設你是自己接案的人,用 AI 做了一個線上報名小工具。有表單、會收 email、要公開給陌生人填。這剛好把五個地雷全踩了一遍,很適合當範例。
問題一:我的密碼和金鑰放在哪裡?
你的工具八成會接一些服務:寄信服務、資料庫、AI 的 API。這些服務都靠一串「金鑰」認你。金鑰就是你的信用卡,誰拿到誰刷。
最常見的災難,是金鑰直接寫在程式碼裡。AI 為了讓範例「跑得起來」,很愛這樣寫。程式碼一放上 GitHub 或被人看到頁面原始碼,金鑰就等於公開了。有人專門用機器人掃這種東西,幾分鐘內就會被撿走。
白話檢查法:打開你的程式碼,搜尋「sk-」「key」「password」「token」這幾個字。只要看到一長串像亂碼的東西直接寫在檔案裡,就中了。
可以直接丟給 AI 的追問:
檢查這份專案有沒有任何金鑰、密碼、token 寫死在程式碼裡。如果有,幫我改成用環境變數讀取,並告訴我要建立哪個設定檔、這個設定檔要加進 .gitignore。
問題二:這個工具收了誰的資料?存在哪?
報名工具會收到姓名、email,可能還有電話。這些是別人的個資,不是你的測試資料。收下來的那一刻,你就有保管責任。
要問的是兩件事。第一,這些資料存在哪裡?是正式的資料庫,還是 AI 圖方便寫進一個純文字檔?第二,誰看得到?那個存資料的地方,是不是不小心設成公開?
很多外洩事件不是被駭,是資料根本放在一個沒鎖的地方,等人來開。
白話檢查法:問自己一句話:「如果明天報名的人問我,他的資料存在哪、誰看得到,我答得出來嗎?」答不出來就是還沒過關。
可以直接丟給 AI 的追問:
這個工具收集的使用者資料存在哪裡?列出所有儲存位置。逐一告訴我:這個位置是公開還是私有、有沒有加密、誰有權限讀取。有風險的地方請直接給我修改建議。
問題三:陌生人打得到它嗎?
工具放上網之後,全世界都連得到它。不只你的客戶,還有無數整天掃網路找漏洞的機器人。
這裡有個很陰的地雷:很多服務的預設值是「公開」。資料庫預設誰都能連、管理後台預設不用登入、上傳的檔案預設有網址就能看。AI 照預設值幫你架好,示範的時候一切正常,因為那時候只有你在用。
白話檢查法:換一台沒登入的裝置(例如手機開無痕模式),試著直接連你的管理頁面、直接猜資料的網址。如果不用密碼就看得到東西,就中了。
可以直接丟給 AI 的追問:
列出這個專案所有對外公開的入口:網頁、API、管理介面、檔案連結。逐一告訴我哪些有做身分驗證、哪些沒有。沒有驗證的部分,說明風險並給我最簡單的補法。
問題四:有人亂輸入會發生什麼事?
你想像的使用者,會乖乖在姓名欄填姓名。真實世界的使用者,會在姓名欄貼一整篇小說、貼一段程式碼、貼奇怪的符號。有些是不小心,有些是故意來測試你的。
沒有防備的表單,輕則資料變得亂七八糟,重則被人塞進惡意指令,把你的資料庫整包搬走。這類攻擊老掉牙到有幾十年歷史了,但每年還是一堆網站因為這個出事。
白話檢查法:自己當奧客。在每個欄位試試看:留空白、貼一萬個字、貼 <script> 這種角括號開頭的東西、email 欄填「不是email的字」。工具如果照單全收,就中了。
可以直接丟給 AI 的追問:
幫這個表單的每個欄位加上輸入驗證:長度上限、格式檢查、過濾特殊字元。另外檢查所有寫入資料庫的地方有沒有防注入攻擊,有問題直接幫我修。
問題五:套件是 AI 隨手挑的,還是有人維護的?
AI 寫程式的時候,會順手引用別人寫好的套件。這很正常,工程師也這樣做。問題在挑的品質。
AI 有時會挑到三年沒更新的老套件,有時甚至會「幻想」出一個不存在的套件名字。更麻煩的是,有心人士會故意註冊那些「AI 常幻想的名字」,放進去的是惡意程式。你一安裝,門就自己打開了。
白話檢查法:把專案用到的套件清單拿出來(AI 可以幫你列),一個一個問:最近一次更新是什麼時候?多少人在用?超過一兩年沒動靜、使用人數少得可憐的,就要小心。
可以直接丟給 AI 的追問:
列出這個專案用到的所有第三方套件。逐一告訴我:它的用途、最近更新時間、是否仍在維護、有沒有已知的安全漏洞。有更主流的替代品就建議我換掉。
把五個問題變成你的固定咒語
五個問題分開問有點累。你可以把它們包成一段固定的審查提示詞,每次要上線前,整段貼給 AI 跑一次。用 DEL 的架構長這樣:
你是一位資安審查員,請審查這個專案能不能安全上線。(方向)
依序檢查五件事,每項給我「通過 / 有風險」的結論加一句白話說明:一、有沒有金鑰或密碼寫死在程式碼裡。二、使用者資料存在哪、是否安全。三、有沒有不用驗證就能碰到的入口。四、輸入有沒有做驗證與防注入。五、第三方套件是否可信且仍在維護。(期待)
有風險的項目直接給修改方案,用我看得懂的中文解釋,不要只丟術語。在全部修完之前,不要跟我說可以上線。(限制)
存起來,重複用。這一段的成本是三十秒,換到的是不用半夜被出事的通知挖起來。
你不用變成資安專家
最後說句真心話。這篇不是要把你嚇回去,更不是要你去啃資安教科書。
AI 讓一個人也能做出自己的工具,這件事很珍貴,我完全站在你這邊。你唯一需要的,是養成「上線前問一輪」的習慣。就像出門前摸一下口袋確認鑰匙,動作很小,省掉的麻煩很大。
五個問題,一段咒語。會問問題的人,就已經贏過九成直接按下發布的人了。
想把「跟 AI 把話說清楚」這件事練得更順,可以從任務模板庫挑一個你常做的任務開始。