為什麼 AI 生成的程式碼更需要安全審查
AI 生成程式碼的速度快得驚人——一個下午就能做出一個完整的網站。但速度快不代表安全。AI 模型在訓練時接觸了大量的範例程式碼,其中包括很多有安全問題的寫法。
更危險的是,AI 生成的程式碼通常「看起來非常專業」——變數命名合理、結構清晰、有註解。這反而讓人放鬆警惕,忽略了安全審查。
風險 1:跨站腳本攻擊 (XSS)
AI 經常生成直接將使用者輸入插入 HTML 的程式碼,沒有做適當的跳脫(escape)。
常見場景:
- 留言板、評論區直接顯示使用者輸入
- 搜尋頁面反射搜尋關鍵字
- 使用
innerHTML而非textContent
檢查方法:在所有使用者可輸入的欄位嘗試輸入 <script>alert(1)</script>。如果彈出對話框,代表有 XSS 漏洞。
風險 2:SQL Injection
AI 在生成資料庫查詢時,經常使用字串拼接而非參數化查詢,讓攻擊者可以注入惡意 SQL 指令。
錯誤寫法(AI 常生成):
db.query("SELECT * FROM users WHERE id = " + userId)
正確寫法:
db.query("SELECT * FROM users WHERE id = ?", [userId])
檢查方法:在輸入欄位嘗試輸入 ' OR 1=1 --,觀察是否回傳非預期的資料。
風險 3:硬編碼的敏感資訊
AI 在示範 API 串接時,經常把 API Key、密碼直接寫在程式碼中。
常見狀況:
- API Key 直接寫在前端 JavaScript 中
- 資料庫密碼寫在設定檔中
- JWT Secret 硬編碼在程式碼裡
檢查方法:用 grep -r "password\|secret\|api_key\|apikey" --include="*.js" --include="*.py" --include="*.env" 搜尋專案中的硬編碼敏感資訊。
風險 4:未驗證的套件依賴
AI 推薦的 npm/pip 套件可能已經過時、有已知漏洞、甚至是惡意套件。
檢查方法:
- npm:
npm audit - pip:
pip-audit或safety check - 檢查套件的最後更新時間和下載量
風險 5:CORS 設定錯誤
AI 為了讓開發過程順暢,經常設定 Access-Control-Allow-Origin: *,允許任何網站存取你的 API。
正確做法:明確列出允許的來源域名,不要使用萬用字元。
風險 6:缺少 CSP 標頭
Content Security Policy 是防禦 XSS 的重要機制,但 AI 幾乎從不主動加入。
檢查方法:用瀏覽器開發者工具查看 Response Headers,確認有 Content-Security-Policy 標頭。
風險 7:不安全的 API 端點
AI 生成的 API 通常沒有身份驗證機制,任何人都可以存取。
常見問題:
- 沒有 API 認證(API Key 或 JWT)
- 沒有權限檢查(任何人都可以刪除資料)
- 沒有 HTTPS 強制
風險 8:缺少輸入驗證
AI 生成的表單處理通常直接信任使用者輸入,沒有做長度限制、格式驗證、類型檢查。
檢查方法:對每個表單欄位嘗試超長字串、特殊字元、非預期的資料類型。
風險 9:預設憑證未更改
AI 在設定資料庫、管理後台時,經常使用預設的帳號密碼(admin/admin123)。
檢查方法:搜尋程式碼中的 admin、root、default 等關鍵字。
風險 10:缺少速率限制
沒有速率限制的 API 容易被暴力破解或 DDoS 攻擊。AI 生成的程式碼幾乎從不主動加入 rate limiting。
解決方案:使用 Express 的 express-rate-limit 或 Nginx 的 limit_req 模組。
上線前安全檢查清單
| 檢查項目 | 工具 | 通過標準 |
|---|---|---|
| XSS 測試 | 手動 + OWASP ZAP | 所有輸入都有跳脫 |
| SQL Injection | sqlmap | 所有查詢都參數化 |
| 硬編碼密碼 | grep / git-secrets | 無硬編碼敏感資訊 |
| 套件漏洞 | npm audit / pip-audit | 無高危漏洞 |
| CORS | 瀏覽器 DevTools | 明確列出允許來源 |
| CSP | securityheaders.com | 有完整 CSP 標頭 |
| HTTPS | SSL Labs | A 等級以上 |
| 速率限制 | curl 壓測 | 有速率限制機制 |
常見問題
AI 生成的前端靜態網站也有安全風險嗎?
有。即使是純前端的靜態網站,也可能有 XSS 漏洞(透過 URL 參數或 DOM 操作)、外部 CDN 被入侵、或 JavaScript 套件有漏洞等風險。
有什麼自動化工具可以檢查安全問題?
推薦 OWASP ZAP(免費開源的安全掃描工具)、npm audit(Node.js 套件漏洞掃描)、以及 GitHub 的 Dependabot(自動檢查套件漏洞)。
我只是做個人部落格,也需要這麼嚴格嗎?
基本的安全措施(HTTPS、不要硬編碼密碼、輸入驗證)對任何網站都是必要的。個人部落格可以不用做到企業級的安全標準,但至少要完成上面清單中的前四項。