快速摘要
AI 生成的後端程式碼經常缺少:輸入驗證、SQL 參數化查詢、正確的認證流程、錯誤處理中的資訊洩漏防護。這篇用 Node.js 和 Python 實例說明如何補強。
AI 後端程式碼的常見問題
- 沒有輸入驗證:直接信任使用者輸入
- SQL 注入:用字串拼接而非參數化查詢
- 錯誤訊息洩漏:把 stack trace 回傳給使用者
- 缺少認證:API endpoint 沒有驗證身份
- CORS 過寬:允許所有來源存取
- 硬編碼密碼:資料庫密碼直接寫在程式碼裡
認證與授權
認證(Authentication)確認「你是誰」,授權(Authorization)確認「你能做什麼」。AI 經常混淆或忽略這兩者。
建議方式:
- 使用 JWT 或 Session 做認證
- 每個 API endpoint 都要檢查授權
- 敏感操作(刪除、修改權限)需要額外驗證
- 考慮使用 Auth0 或 Clerk 等專業認證服務
輸入驗證
所有 API 輸入必須驗證。推薦工具:
- Node.js:Zod 或 Joi
- Python:Pydantic(FastAPI 內建)
驗證內容:資料類型、長度限制、格式(email、URL)、範圍(數字最大最小值)。
資料庫安全
- 永遠用參數化查詢,不要拼接字串
- 用 ORM(Prisma、SQLAlchemy)可以減少 SQL 注入風險
- 資料庫使用者權限最小化
- 敏感資料加密儲存
錯誤處理
錯誤處理要同時考慮使用者體驗和安全性:
- 不要把 stack trace 或內部錯誤訊息回傳給使用者
- 回傳通用的錯誤訊息(「系統錯誤,請稍後再試」)
- 在伺服器端記錄完整的錯誤資訊(包括 stack trace)
- 對不同錯誤回傳正確的 HTTP 狀態碼
日誌安全
- 不要記錄密碼、API Key、信用卡號
- 記錄所有認證失敗事件(用於偵測攻擊)
- 日誌檔案設定適當的存取權限
- 考慮使用結構化日誌(JSON 格式)便於分析
常見問題
AI 生成的 API 可以直接上線嗎?
強烈不建議。至少需要經過安全審查、加入認證、設定速率限制和錯誤處理。AI 生成的 API 通常功能正確但安全防護不足。
Node.js 和 Python 哪個更適合 AI 應用?
Python 的 AI 生態系更成熟(LangChain、FastAPI、各種 ML 庫)。Node.js 在即時應用(WebSocket)和前後端統一語言方面有優勢。
需要自己處理認證嗎?
建議用成熟的認證服務(Auth0、Clerk、Supabase Auth)而不是自己實作。自己實作認證的安全風險太高。