// docs / security guides / claude code checklist
Claude Code Security-Checkliste: 26 Punkte
Claude Code (Anthropics CLI-Agent) generiert ganze Codebasen über Slash-Befehle, verwaltet das Refactoring mehrerer Dateien und liest/writes Dateien über Bash. Diese Checkliste zielt auf die spezifischen Risiken von Claude Code ab: keine Standardsicherheitsrichtlinien, selten hinzugefügte Ratenbegrenzung, <code>.claude/CLAUDE.md</code> als Ihre Sicherheitsleitplankendatei und das Risiko der Übergabe von <code>.env</code> oder zwischengespeicherten Tokens. 26 Elemente zu Geheimnissen, Datenbank, Authentifizierung, Headern, Bereitstellung und Claude Code-spezifischen Fallstricken.
PRE = Vorbereiten (Prüfen Sie Ihre Quelle). DEPLOY = zum Zeitpunkt der Bereitstellung. POST = Überprüfung nach der Bereitstellung. Artikel verweisen auf FixVibe Prüf-IDs im category.check-id-Format, sofern relevant.
Geheimnisse und API Schlüssel (5 Artikel)
Claude Code liest ganze Quellbäume und gibt ganze Dateien aus. Geheimnisse in Ihrem Kontext werden zu Geheimnissen in der Ausgabe.
- PRE — Create
.claude/CLAUDE.mdwith security policies. Hinzufügen: „Security Rules: Integrieren Sie niemals service_role Schlüssel in Client-Bundles. Leiten Sie vertrauliche Vorgänge immer über reine Server-Endpunkte weiter. Stellen Sie sicher, dass NEXT_PUBLIC_* Umgebungsvariablen nur sichere Werte enthalten (keine Schlüssel, keine Token).“ Claude Code lautet.claude/CLAUDE.mdfür die Projektanleitung. - PRE — Ensure
.env.localis in.gitignore. Claude Code kann während einer Umgestaltung versehentlich.env.localfestschreiben. Führen Siegit ls-files .env*aus, um zu überprüfen, was verfolgt wird. Wenn.env.localvorhanden ist, wird es angezeigt. - PRE — Audit generated API routes for env-var verification. Claude Code vergisst manchmal zu überprüfen, ob
process.env.SECRETserverseitig existiert, bevor es verwendet wird. Routen sollten schnell ausfallen, wenn eine Umgebungsvariable fehlt, und nicht auf einen Standardwert zurückgreifen. - PRE — Check the
.claudecache directory. Claude Code speichert den Konversationskontext in.claude/cacheoder.claude/historyzwischen. Diese Dateien sollten nicht festgeschrieben werden. Fügen Sie.claude/bis.gitignorehinzu. - POST — Run secrets.browser-storage on the deployed app. Wenn Claude Code einen Schlüssel eingefügt hat, wird der passive Scan ihn im gerenderten Bundle finden.
Datenbankzugriffskontrolle (4 Artikel)
Claude Code eignet sich hervorragend zum Generieren von Schemata, aber RLS-Richtlinien erfordern explizite Anweisungen.
- PRE — Instruct Claude Code on RLS in
.claude/CLAUDE.md. Hinzufügen: „Jede Migration mussALTER TABLE ... ENABLE ROW LEVEL SECURITYundFORCE ROW LEVEL SECURITYenthalten. Jede Richtlinie mussauth.uid()des Benutzers validieren.“ - PRE — Review generated migrations for
FORCE ROW LEVEL SECURITY. Claude Code generiert möglicherweiseENABLE, vergessen Sie jedochFORCE. OhneFORCEumgehen Tabellenbesitzer (der Migrationsläufer) RLS. Fügen Sie es manuell hinzu, falls es fehlt. - DEPLOY — Test RLS enforcement after deploy. Öffnen Sie Supabase Studio, wählen Sie eine Tabelle aus und bestätigen Sie, dass RLS der Umschalter ON ist. Wenn bei der Migration von Claude Code
ENABLEohneFORCEverwendet wurde, wird auf dem Schalter ON angezeigt, die Durchsetzung ist jedoch unvollständig. - POST — Run the baas.supabase-rls active check. Es wird versucht, mit der Anon-Taste zu schreiben. Wenn dies gelingt, ist RLS unvollständig. Fügen Sie
FORCEzur Migration hinzu und stellen Sie es erneut bereit.
Authentifizierung und Sitzungen (4 Elemente)
Claude Code generiert Authentifizierungsflüsse gut, fügt aber nicht automatisch eine Ratenbegrenzung hinzu und überprüft nicht alle Token-Ansprüche serverseitig.
- PRE — Mandate server-only auth verification in
.claude/CLAUDE.md. Hinzufügen: „Jede API-Route, die Daten verändert, muss den Benutzer mitawait supabase.auth.getUser()auf dem Server verifizieren. Vertrauen Sie niemalsgetSession()oder dem Benutzer ID aus dem Anforderungstext.“ - PRE — Check generated auth handlers for token expiry. Magic-Link- und Passwort-Reset-Tokens benötigen servererzwungenes
expires_at. Fragen Sie Claude Code: „Fügen Sie eine Prüfung hinzu, die Token ablehnt, die älter als 1 Stunde sind.“ - PRE — Verify sign-in redirect guards. Die Parameterumleitung
nextmuss mit/und nicht mit//beginnen. Zu.claude/CLAUDE.mdhinzufügen: „Validieren Sie den Parameternext: muss mit/beginnen, ablehnen, wenn er mit//beginnt oder ein Protokoll enthält.“ - POST — Test logout clears cookies. Anmelden, abmelden, Anwendung → Cookies überprüfen. Das Sitzungscookie muss gelöscht werden. Wenn es weiterhin besteht, zerstört der Abmeldeendpunkt den Status nicht.
HTTP Header und CSP (3 Elemente)
Claude Code generiert standardmäßig keine Middleware, es sei denn, Sie fragen danach.
- PRE — Add middleware request to
.claude/CLAUDE.md. Include: „Generieren Siesrc/middleware.tsmit Content-Security-Policy unter Verwendung einer Nonce pro Anfrage, HSTS, X-Frame-Options und X-Content-Type-Options-Headern.“ Bitten Sie dann Claude Code, es umzusetzen. - PRE — Verify
src/middleware.tsexists and has CSP. Beim Layout Next.jssrc/muss sich die Middleware beisrc/middleware.tsbefinden, nicht im Projektstamm. Stellen Sie sicher, dass der CSP-Header'strict-dynamic'und eine Nonce enthält. - POST — Run headers.security-headers on the deployed URL. Die Prüfung meldet fehlende Header und schlägt Korrekturen für Ihre Plattform vor.
Einsatzhygiene (4 Artikel)
Claude Code konfiguriert Ihre Bereitstellungsplattform nicht – das liegt in Ihrer Verantwortung, ist aber eine Überprüfung wert.
- DEPLOY — Scope env vars per environment in Vercel (or equivalent). Einstellungen → Umgebungsvariablen → Jedes Geheimnis nur Production zuweisen. Teilen Sie
sk_live_*niemals mit Vorschau oder Entwicklung. - DEPLOY — Audit your CI workflow for secret echo. Wenn GitHub Actions oder ein anderes CI irgendwo
echo $SECREThat, entfernen Sie es. Build-Protokolle werden archiviert; Geheimnisse in Protokollen sind gefährdet. - DEPLOY — Prefer platform-native secret storage. Vercels Einstellungen → Umgebungsvariablen ist verschlüsselt; GitHub Aktionsgeheimnisse sind besser als nichts, passen aber nicht zum plattformeigenen Speicher.
- POST — Rotate any key that reached a public build. Wenn ein Schlüssel gerade Sekunden lang in einer Vercel Vorschau URL oder einem öffentlichen Artefakt angezeigt wird, ist er kompromittiert. Sofort drehen.
Claude Code-spezifische Fallstricke (5 Elemente)
Muster, die für die Architektur und Arbeitsabläufe von Claude Code einzigartig sind:
- Claude Code forks work into subagents. Bei großen Aufgaben kann Claude Code mehrere Subagenteninstanzen erzeugen, jede mit teilweisem Codebasiskontext. Wenn ein Subagent ein geheimnissicheres Muster halluziniert, was ein anderer nicht tut, kommt es zu Inkonsistenzen. Überprüfen Sie den endgültigen Unterschied sorgfältig.
- Bash operations are unverified. Claude Code führt Bash-Befehle direkt aus.
git commit -m "fix"ist praktisch, aber wenn das Arbeitsverzeichnis eine.env-Datei hat und diese in einem Glob enthalten ist, erfolgt ein Commit. Überprüfen Sie immergit diff --cached, bevor Claude Code ein Commit durchführt. - Context window boundaries create gaps. Wenn Ihre Codebasis groß ist, kann sich der Kontext von Claude Code auf mehrere Fenster verteilen. Die
.env.local-Behandlung eines Fensters kann sich von der eines anderen unterscheiden. Setzen Sie die Richtlinie in.claude/CLAUDE.mddurch und überprüfen Sie die Ausgabe. - Rate-limiting is almost never added without asking. Claude Code generiert funktionierende CRUD, enthält jedoch selten ratenbegrenzende Header oder exponentielle Backoff-Logik. Bitten Sie ausdrücklich in
.claude/CLAUDE.mddarum. .claude/CLAUDE.mdis read but not enforced. Claude Code liest Ihr.claude/CLAUDE.mdals Hinweis, nicht als Einschränkung. Wenn der Hinweis mit der Aufgabe in Konflikt steht, kann Claude Code ihn ignorieren. Überprüfen Sie immer die Ausgabe.
Nächste Schritte
Überprüfen Sie general vibe coding security checklist auf 44 werkzeugübergreifende Elemente und sehen Sie sich dann step-by-step hardening für Bereitstellungszeitmuster an. Wenn Sie auch Cursor verwenden, sehen Sie sich Cursor security checklist an.
