快速摘要
AI 寫的程式碼「能跑」不代表「安全」。根據研究,AI 生成的程式碼中有 30-40% 包含至少一個安全漏洞。這篇提供一份實用的檢查清單,讓你在 merge 之前抓出最常見的問題。

為什麼需要審查 AI 程式碼

AI 生成的程式碼有幾個系統性的安全問題:

  • 訓練資料中的壞習慣:AI 從 GitHub 上數百萬個 repo 學習,其中很多程式碼本身就不安全
  • 偏好「能跑」而非「安全」:AI 優先產生功能正確的程式碼,安全性不是預設目標
  • 缺乏上下文:AI 不知道你的應用場景、威脅模型和合規要求
  • 過時的做法:AI 可能使用已知有問題的函式庫版本或已棄用的 API

最常見的漏洞類型

漏洞常見程度影響範例
硬編碼密碼/Key非常常見嚴重API Key 直接寫在程式碼中
SQL Injection常見嚴重字串拼接而非參數化查詢
XSS常見中高innerHTML 直接插入使用者輸入
缺少輸入驗證非常常見沒有檢查輸入長度和格式
不安全的依賴常見中高使用有已知漏洞的套件版本
CORS 設定過寬常見Access-Control-Allow-Origin: *
缺少錯誤處理常見低中錯誤訊息洩漏內部資訊

安全檢查清單

1. 認證與授權

  • 有沒有硬編碼的密碼、API Key 或 Token?
  • 認證邏輯是否正確(不是只檢查前端)?
  • API endpoint 有沒有授權檢查?

2. 輸入處理

  • 所有使用者輸入是否經過驗證?
  • SQL 查詢是否使用參數化查詢?
  • HTML 輸出是否經過 escape?
  • 檔案上傳是否限制類型和大小?

3. 資料保護

  • 敏感資料是否加密儲存?
  • 密碼是否用 bcrypt/argon2 雜湊?
  • 日誌中是否記錄了敏感資訊?

4. 依賴安全

  • 套件版本是否有已知漏洞?(npm audit / pip audit)
  • 是否使用了已棄用的 API?
  • lock 檔案是否 commit 到 Git?

5. 設定安全

  • 有沒有 debug mode 被開啟?
  • CORS 設定是否過於寬鬆?
  • 有沒有設定安全 headers?

自動化工具

工具類型費用語言支援
Semgrep靜態分析免費 / 付費多語言
Snyk依賴掃描免費 / 付費多語言
CodeQL靜態分析GitHub 免費多語言
npm audit依賴掃描免費Node.js
Bandit靜態分析免費Python

審查工作流程

  1. 自動化掃描:在 CI/CD 中加入 Semgrep 和 npm audit
  2. diff 檢查:逐行檢查 AI 生成的程式碼變動
  3. 重點審查:對照上面的清單逐項檢查
  4. 測試覆蓋:確保安全相關的邏輯有測試覆蓋
  5. 簽核:至少一個人審查通過才能 merge

常見問題

AI 生成的程式碼真的不安全嗎?

不是說 AI 生成的程式碼一定不安全,而是它不會「主動」考慮安全。AI 優先考慮的是功能正確性,安全性通常不在預設考量中。所以需要人工審查。

有自動化工具可以檢查嗎?

有。Semgrep、Snyk、CodeQL 都可以自動掃描常見漏洞。但自動化工具不能取代人工審查——它們能抓住已知模式,但抓不住邏輯漏洞。

非工程師也能做程式碼審查嗎?

安全審查確實需要技術背景。如果你不是工程師,至少要做到:1) 檢查有沒有硬編碼的密碼或 Key 2) 確認有沒有外部 CDN 引用 3) 用自動化工具掃描一遍。