セキュリティレビュースキル
このスキルは、すべてのコードがセキュリティのベストプラクティスに従い、潜在的な脆弱性を特定することを保証します。
有効化するタイミング
- 認証または認可の実装
- ユーザー入力またはファイルアップロードの処理
- 新しい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キー、トークン、パスワードなし
- すべてのシークレットを環境変数に
-
.env.localを.gitignoreに - git履歴にシークレットなし
- 本番シークレットはホスティングプラットフォーム(Vercel、Railway)に
2. 入力検証
常にユーザー入力を検証
import { z } from 'zod'
// 検証スキーマを定義
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.ZodErr…