AI 寫的程式安全嗎?Vibe Coding 常見的資安漏洞

AI 寫的程式不一定安全:能跑,只代表功能做出來了。Veracode 2025 年的報告用 80 個程式任務測試 100 多個 AI 模型,在沒有特別要求資安時,有 45% 的任務寫出帶有已知弱點的程式碼。上線前,金鑰、資料庫權限、輸入驗證與套件都要逐項確認。

畫面做好、功能點得動,下週就要發給客戶。「AI 寫的,應該沒問題吧?」問題是,你要求 AI 的是讓功能動起來;沒開口要的安全,它不一定會顧到。以下用白話說明 Vibe Coding(用自然語言請 AI 寫程式、自己不太看程式碼的開發方式)常見的資安漏洞。

研究怎麼說:AI 寫的程式碼有多常帶漏洞?

資安公司 Veracode 在〈2025 GenAI Code Security Report〉設計 80 個程式填空任務,涵蓋 Java、JavaScript、C#、Python,每題都有安全與不安全兩種寫法,對應 SQL 注入、跨網站指令碼(XSS)、日誌注入與不安全的加密演算法四類弱點。題目交給 100 多個大型語言模型完成,提示不加任何資安要求,再用工具自動檢查原始碼。

結果只有 55% 的任務產出安全的程式碼。SQL 注入與加密兩類的平均通過率在八成以上,XSS 與日誌注入只有一成多;較新、較大的模型,也沒有寫出明顯更安全的程式碼。

研究條件要看清楚:每題只給單一函式,也沒提醒資安;報告也說,加入資安要求後結果可能較好。所以重點不是「你的程式有 45% 是漏洞」,而是:你沒要求,AI 很常選到不安全的寫法。報告認為,這和 AI 學習的公開程式碼本來就混著不安全寫法有關。

人和 AI 一起寫也類似。史丹佛大學團隊在 ACM CCS 2023 發表的使用者研究,請 47 位受試者完成 5 個資安相關的程式任務;可用 AI 助理(當時 OpenAI 的 codex-davinci-002 模型)的一組,有 4 題比較常寫出不安全的解法。以寫入資料庫那題為例,AI 組有 36% 的人寫出可被 SQL 注入的程式,沒有 AI 的對照組是 7%。而且用 AI 的人更傾向相信自己的程式是安全的。

Vibe Coding 常見的 7 個資安漏洞

1. 金鑰寫在前端或程式碼裡

請 AI「串金流」或「接上 OpenAI」時,最省事的做法是把金鑰直接寫進程式。但前端程式碼每個訪客都下載得到,推上公開程式碼倉庫也等於公開。以雲端資料庫 Supabase 為例,官方把金鑰分兩種:publishable key 可公開,只能碰到資料庫規則允許的範圍;secret key 會繞過規則,官方明講不能放進瀏覽器。外洩後怎麼補救,可以看〈程式碼裡的 API 金鑰外洩〉。

2. 資料庫權限沒設好:Supabase 沒開 RLS

Supabase 的 Row Level Security(RLS,列層級安全),是「每一筆資料誰能看、誰能改」的規則。官方文件寫明:對外 API 可存取的資料表若沒開 RLS,只要角色被授予權限,就能讀寫整張表,因此這類資料表每一張都要開。文件也提醒,部分專案新建資料表時,預設就把讀、寫、改、刪權限給了未登入的訪客角色,只加規則不會收回。白話說:網站要登入,資料庫卻可能對所有人開著門。

3. 只在前端擋權限

「看不到管理按鈕」不等於「不能做管理動作」,按鈕藏起來只是畫面。國際資安社群 OWASP 的 2025 年版 Top 10 把「存取控制失效」排第一,並指出存取控制只有放在可信任的伺服器端程式或 serverless API 才有效,因為攻擊者改不到那裡的檢查。

4. 輸入沒有驗證:SQL 注入與 XSS

SQL 注入,是使用者輸入的文字被系統當成資料庫指令執行,資料可能被讀走或竄改;XSS,是使用者輸入的內容沒處理就顯示在網頁上,變成在其他訪客瀏覽器裡執行的程式。前面 Veracode 的實驗中,XSS 正是 AI 表現最差的類別之一。防守方向:資料庫查詢用參數化寫法、顯示使用者內容前先編碼,檢查放在伺服器端。

5. 裝到不存在或過時的套件

套件是別人寫好、可直接安裝的程式模組。USENIX Security 2025 的一篇論文,用 16 個模型以 Python 與 JavaScript 產生 57.6 萬份程式碼樣本,發現模型推薦的套件有 19.7% 根本不存在;商用模型(研究中為 GPT 系列)平均 5.2%,開源模型 21.7%。抽樣重問同一題 10 次,有 43% 的假套件 10 次都再出現。研究者指出,攻擊者可以搶先用這些名字發布惡意套件。研究測的是 GPT-4 等當時的模型,新模型的比例可能不同。

過時套件也是風險:OWASP 把有漏洞、不再維護或過時的元件列為供應鏈風險。

6. 除錯模式與錯誤訊息外露

開發時為了找錯,系統常把詳細錯誤直接顯示在畫面上,上線忘了關,訪客也看得到程式內部資訊。OWASP 把向使用者顯示堆疊追蹤(程式出錯時的內部執行紀錄)或過度詳細的錯誤訊息列為安全設定錯誤,並提醒這可能暴露含已知漏洞的元件版本。

7. 沒有登入嘗試限制

登入頁若能無限次嘗試,等於讓自動化程式一組組猜密碼。OWASP 建議限制登入失敗次數或逐步拉長等待時間,同時避免正常帳號被惡意鎖住,並在可行時加上多因素驗證。

上線前自查清單:這 8 項先問清楚

這張表只看資安;產品面的上線準備,可以參考〈Vibe Coding 做出 App 之後,怎麼走到真正上線?〉。

檢查項目 怎麼確認
金鑰 前端與程式碼裡沒有 secret key 或密碼;推上 Git 過的金鑰已作廢換新
資料庫規則 對外資料表都已開 RLS;用「未登入」和「另一個帳號」各試一次,看不到別人的資料
權限檢查 管理功能在伺服器端檢查身分
輸入處理 資料庫查詢用參數化寫法;使用者內容顯示前有編碼
套件 每個套件都確認存在、拼字正確、仍有人維護,並掃描已知漏洞
錯誤訊息 除錯模式已關閉;錯誤頁只顯示一般提示
登入防護 登入失敗有次數限制或延遲;管理員開啟多因素驗證
紀錄 登入失敗、權限被拒有紀錄,且有人定期看

只要有一項答不出來,就先列為上線前要補的工作。

我用 AI 做的系統要上線了,怎麼確認真的擋得住?

清單能抓出明顯問題,但權限有沒有真的擋住,光看程式碼不一定看得出來,要實際試過才知道。研究也顯示,用 AI 的人容易高估程式的安全性,最好請沒參與開發的人再看一次。

如果系統即將對客戶開放、內部又沒人能做,可以考慮智盾資安服務:檢查程式源碼與金鑰外洩(硬編碼金鑰、外洩憑證、有已知漏洞的相依套件),也檢測網站與對外服務、資料庫曝露與設定;風險會在授權範圍內實際驗證、由人工重現確認,並交付風險分級報告與優先修補建議。檢測反映的是特定時間點的狀態,大改版後值得再確認一次。

資料來源與核對日期

作者與關係揭露

本文由奧微軟體開發企業社發布。內容為一般資安知識整理,不構成個別系統的檢測結論;奧微軟體提供與本文主題相關的智盾資安服務。

常見問題

AI 寫的程式安全嗎?

不一定。Veracode 2025 年報告讓 100 多個 AI 模型完成 80 個程式任務,沒要求資安時,有 45% 的任務寫出帶已知弱點的程式碼;能跑不代表安全,上線前要檢查。

Vibe Coding 常見的資安漏洞有哪些?

常見的有金鑰寫在前端或程式碼裡、資料庫權限沒設好(例如 Supabase 沒開 RLS)、只在前端擋權限、輸入沒驗證、裝到不存在或過時的套件、錯誤訊息外露,以及沒有登入嘗試限制。

用 Supabase 一定要開 RLS 嗎?

Supabase 官方文件要求,對外 API 可存取的每張資料表都要開 RLS;沒開時,只要角色被授予權限就能讀寫整張表。會繞過 RLS 的 secret key 不能放進瀏覽器。

回文章列表