安全性審查技能
此技能確保所有程式碼遵循安全性最佳實務並識別潛在漏洞。
何時啟用
- 實作認證或授權
- 處理使用者輸入或檔案上傳
- 建立新的 API 端點
- 處理密鑰或憑證
- 實作支付功能
- 儲存或傳輸敏感資料
- 整合第三方 API
安全性檢查清單
1. 密鑰管理
FAIL: 絕不這樣做
const apiKey = "sk-proj-xxxxx" // 寫死的密鑰
const dbPassword = "password123" // 在原始碼中
PASS: 總是這樣做
const apiKey = process.env.OPENAI_API_KEY
const dbUrl = process.env.DATABASE_URL
// 驗證密鑰存在
if (!apiKey) {
throw new Error('OPENAI_API_KEY not configured')
}
驗證步驟
- 無寫死的 API 金鑰、Token 或密碼
- 所有密鑰在環境變數中
-
.env.local在 .gitignore 中 - git 歷史中無密鑰
- 生產密鑰在託管平台(Vercel、Railway)中
2. 輸入驗證
總是驗證使用者輸入
import { z } from 'zod'
// 定義驗證 schema
const CreateUserSchema = z.object({
email: z.string().email(),
name: z.string().min(1).max(100),
age: z.number().int().min(0).max(150)
})
// 處理前驗證
export async function createUser(input: unknown) {
try {
const validated = CreateUserSchema.parse(input)
return await db.users.create(validated)
} catch (error) {
if (error instanceof z.ZodError) {
return { success: false, errors: error.errors }
}
throw error
}
}
檔案上傳驗證
function validateFileUplo…