快速摘要
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)而不是自己實作。自己實作認證的安全風險太高。