// docs / security guides / claude code checklist
Claude Code セキュリティチェックリスト: 26 項目
Claude Code (Anthropic の CLI エージェント) は、スラッシュ コマンドを介してコードベース全体を生成し、複数ファイルのリファクタリングを管理し、bash を介して /writes ファイルを読み取ります。このチェックリストは、Claude Code の特定のリスクを対象としています。デフォルトのセキュリティ ポリシーがない、レート制限がほとんど追加されない、セキュリティ ガードレール ファイルとして <code>.claude/CLAUDE.md</code> が使用される、<code>.env</code> またはキャッシュされたトークンをコミットするリスクなどです。シークレット、データベース、認証、ヘッダー、デプロイメント、および Claude Code 固有の注意事項にわたる 26 の項目。
PRE = 事前デプロイ (ソースを監査)。 DEPLOY = デプロイ時。 POST = デプロイ後の検証。項目は FixVibe を参照し、該当する場合は category.check-id フォームの ID を確認します。
シークレットと API キー (5 項目)
Claude Code はソース ツリー全体を読み取り、ファイル全体を出力します。コンテキスト内のシークレットは、出力のシークレットになります。
- PRE — Create
.claude/CLAUDE.mdwith security policies. 追加: 「Security Rules: service_role キーをクライアント バンドルにインライン化しないでください。機密操作は常にサーバー専用エンドポイント経由でルーティングしてください。NEXT_PUBLIC_* 環境変数には安全な値のみが含まれていることを確認してください (キーやトークンは含まれていません)。」 Claude Code はプロジェクトのガイダンスとして.claude/CLAUDE.mdと読み取られます。 - PRE — Ensure
.env.localis in.gitignore. Claude Code は、リファクタリング中に.env.localを誤ってコミットする可能性があります。git ls-files .env*を実行して、追跡内容を確認します。.env.localが存在する場合、それは公開されます。 - PRE — Audit generated API routes for env-var verification. Claude Code は、
process.env.SECRETを使用する前にサーバー側に存在することを確認することを忘れることがあります。環境変数が欠落している場合、ルートはデフォルトに落ちずにすぐに失敗する必要があります。 - PRE — Check the
.claudecache directory. Claude Code は会話コンテキストを.claude/cacheまたは.claude/historyにキャッシュします。これらのファイルはコミットしないでください。.gitignoreに.claude/を追加します。 - POST — Run secrets.browser-storage on the deployed app. Claude Code がキーをインライン化した場合、パッシブ スキャンはレンダリングされたバンドル内でそのキーを見つけます。
データベースアクセス制御(4項目)
Claude Code はスキーマの生成に優れていますが、RLS ポリシーには明示的な指示が必要です。
- PRE — Instruct Claude Code on RLS in
.claude/CLAUDE.md. 追加: 「すべての移行にはALTER TABLE ... ENABLE ROW LEVEL SECURITYとFORCE ROW LEVEL SECURITYを含める必要があります。すべてのポリシーはユーザーのauth.uid()を検証する必要があります。」 - PRE — Review generated migrations for
FORCE ROW LEVEL SECURITY. Claude Code はENABLEを生成しますが、FORCEは忘れます。FORCEがない場合、テーブル所有者 (移行ランナー) は RLS をバイパスします。不足している場合は手動で追加します。 - DEPLOY — Test RLS enforcement after deploy. Supabase Studio を開き、テーブルを選択し、RLS の切り替えが ON であることを確認します。 Claude Code の移行で
FORCEを使用せずにENABLEを使用した場合、トグルには ON と表示されますが、適用は不完全です。 - POST — Run the baas.supabase-rls active check. anon キーを使用して書き込みを試みます。成功した場合、RLS は不完全です。
FORCEを移行に追加して再デプロイします。
認証とセッション (4 項目)
Claude Code は認証フローを適切に生成しますが、レート制限を自動的に追加したり、すべてのトークン要求をサーバー側で検証したりしません。
- PRE — Mandate server-only auth verification in
.claude/CLAUDE.md. 追加: 「データを変更するすべての API ルートは、サーバー上のawait supabase.auth.getUser()でユーザーを検証する必要があります。リクエスト本文のgetSession()またはユーザー ID を決して信頼しないでください。」 - PRE — Check generated auth handlers for token expiry. マジックリンク トークンとパスワード リセット トークンにはサーバーによる強制
expires_atが必要です。 Claude Code に質問してください: 「1 時間より古いトークンを拒否するチェックを追加してください。」 - PRE — Verify sign-in redirect guards.
nextパラメータ リダイレクトは、//ではなく/で始まる必要があります。.claude/CLAUDE.mdに追加: 「nextパラメーターを検証します。/で始まる必要があります。//で始まる場合、またはプロトコルが含まれている場合は拒否します。」 - POST — Test logout clears cookies. サインイン、サインアウトし、「アプリケーション」→「Cookie」を検査します。セッション Cookie をクリアする必要があります。継続する場合、ログアウト エンドポイントは状態を破壊していません。
HTTP ヘッダーと CSP (3 項目)
Claude Code は、要求しない限り、デフォルトではミドルウェアを生成しません。
- PRE — Add middleware request to
.claude/CLAUDE.md. インクルード: 「リクエストごとの nonce、HSTS、X-Frame-Options、および X-Content-Type-Options ヘッダーを使用してsrc/middleware.tsと Content-Security-Policy を生成します。」次に、Claude Code に実装を依頼します。 - PRE — Verify
src/middleware.tsexists and has CSP. Next.jssrc/レイアウトでは、ミドルウェアはプロジェクト ルートではなくsrc/middleware.tsにある必要があります。 CSP ヘッダーに'strict-dynamic'と nonce が含まれていることを確認します。 - POST — Run headers.security-headers on the deployed URL. チェックではヘッダーの欠落が報告され、プラットフォームの修正が提案されます。
展開衛生 (4 項目)
Claude Code は展開プラットフォームを構成しません。それはあなたの責任ですが、確認する価値があります。
- DEPLOY — Scope env vars per environment in Vercel (or equivalent). 設定 → 環境変数 → 各シークレットを Production にのみ割り当てます。
sk_live_*をプレビューまたは開発と共有しないでください。 - DEPLOY — Audit your CI workflow for secret echo. GitHub アクションまたは別の CI に
echo $SECRETが含まれている場合は、それを削除します。ビルド ログはアーカイブされます。ログ内の秘密が侵害されます。 - DEPLOY — Prefer platform-native secret storage. Vercel の設定 → 環境変数は暗号化されています。 GitHub アクション シークレットは何もしないよりは優れていますが、プラットフォーム ネイティブのストレージには適合しません。
- POST — Rotate any key that reached a public build. キーが Vercel プレビュー URL または公開アーティファクトに偶数秒間表示された場合、そのキーは侵害されています。すぐに回転させます。
Claude Code 特有の注意点 (5 項目)
Claude Code のアーキテクチャとワークフローに固有のパターン:
- Claude Code forks work into subagents. 大規模なタスクでは、Claude Code が部分的なコードベース コンテキストを持つ複数のサブエージェント インスタンスを生成することがあります。あるサブエージェントが、別のサブエージェントがしない秘密の安全なパターンの幻覚を見せると、矛盾が生じます。最終的な差分を注意深く確認してください。
- Bash operations are unverified. Claude Code は bash コマンドを直接実行します。
git commit -m "fix"は便利ですが、作業ディレクトリに.envファイルがあり、グロブにそれが含まれている場合はコミットされます。 Claude Code をコミットする前に、必ずgit diff --cachedを確認してください。 - Context window boundaries create gaps. コードベースが大きい場合、Claude Code のコンテキストが複数のウィンドウに分割される可能性があります。あるウィンドウの
.env.local処理は別のウィンドウとは異なる場合があります。.claude/CLAUDE.mdのポリシーを適用し、出力を確認します。 - Rate-limiting is almost never added without asking. Claude Code は動作する CRUD を生成しますが、レート制限ヘッダーや指数バックオフ ロジックが含まれることはほとんどありません。
.claude/CLAUDE.mdで明示的に要求してください。 .claude/CLAUDE.mdis read but not enforced. Claude Code は、.claude/CLAUDE.mdを制約ではなくヒントとして読み取ります。ヒントがタスクと矛盾する場合、Claude Code はそれを無視する可能性があります。常に出力を確認してください。
次のステップ
44 のクロスツール項目については general vibe coding security checklist を確認し、デプロイ時のパターンについては step-by-step hardening を参照してください。 Cursor も使用している場合は、Cursor security checklist を参照してください。
