Nutze diese Claude Code Sicherheits-Checkliste, um schnelle, konkrete Spot-Checks zu Auth, Input-Validierung, Geheimnisverwaltung und Injection-Oberflächen in Web-Apps durchzuführen.

Ein leichter Sicherheits-Spot-Check ist eine schnelle Prüfung (oft 30–60 Minuten), die offensichtliche, hochrelevante Probleme finden soll, bevor etwas ausgeliefert wird. Es ist kein vollständiges Audit. Denk daran wie an einen Sicherheitsrundgang: Du scannst die Pfade, an denen in echten Apps am häufigsten etwas schiefgeht, und suchst nach Beweisen, nicht nach Vermutungen.
Diese Claude Code Sicherheits-Checkliste konzentriert sich auf die Bereiche, die in alltäglichen Web-Apps am häufigsten versagen:
Sie versucht nicht, das Fehlen von Bugs zu beweisen, komplexe Angreifermodelle zu modellieren oder Penetrationstests zu ersetzen.
„Konkrete Befunde" bedeutet, dass jedes Problem, das du dokumentierst, Belege enthält, mit denen ein Entwickler sofort arbeiten kann. Für jeden Befund erfasse:
KI ist Helfer, nicht Autorität. Nutze sie zum Suchen, Zusammenfassen und Vorschlagen von Tests. Verifiziere dann durch Lesen des Codes und, wenn möglich, durch Reproduktion mit einer echten Anfrage. Wenn das Modell keine spezifischen Orte und Schritte nennen kann, behandle die Aussage als unbelegt.
Eine schnelle Prüfung funktioniert nur, wenn du das Ziel eingrenzt. Bevor du Claude Code etwas anschauen lässt, entscheide, was du heute beweisen willst und was nicht geprüft wird.
Beginne mit 1 bis 3 echten Nutzer-Journeys, bei denen Fehler Geld kosten, Daten offenlegen oder Macht gewähren. Gute Kandidaten sind Login, Passwort-Reset, Checkout und Admin-Edit-Screens.
Nenne als Nächstes die Assets, die du schützen musst. Sei spezifisch: Nutzerkonten, Zahlungsaktionen, personenbezogene Daten, admin-only Operationen.
Schreibe dann deine Bedrohungsannahmen in einfachen Worten auf. Verteidigst du gegen einen neugierigen Nutzer, der rumklickt, einen externen Angreifer mit Scripts oder einen Insider mit Teilzugang? Deine Antwort ändert, was „gut genug" bedeutet.
Definiere schließlich Pass/Fail, damit dein Spot-Check mit Befunden endet, nicht mit Gefühlen. Einfache Regeln funktionieren gut:
Wenn du nicht beschreiben kannst, wie ein Fehlschlag aussieht, ist der Scope noch zu unscharf.
Ein Spot-Check funktioniert nur, wenn das Modell die richtigen Stellen betrachtet. Sammle ein kleines Paket aus Code und Notizen, damit die Prüfung Beweise liefern kann, keine Vermutungen.
Beginne damit, den sicherheitskritischen Pfad zu teilen: Entry-Points von Requests und der Code, der entscheidet, wer der Nutzer ist und was er darf. Füge gerade genug umgebenden Code hinzu, um den Datenfluss zu zeigen.
Ein praktisches Paket enthält gewöhnlich:
Füge ein paar Zeilen zu Umgebungsannahmen hinzu: Session vs. JWT, wo Tokens leben (Cookie oder Header), Reverse Proxy oder API-Gateway-Verhalten, Queues/Cron-Worker und alle „internal-only" Endpoints.
Bevor du Bugs jagst, frage nach einem Inventar: Entry-Points, privilegierte Endpoints und betroffene Datenspeicher. Das verhindert übersehene Oberflächen.
Stimme auch ein Ausgabeformat ab, das zu konkreten Befunden zwingt. Eine einfache Tabelle funktioniert gut: Finding, Severity, Betroffener Endpoint/Datei, Evidence (genauer Ausschnitt oder Zeilenbereich), Exploit-Szenario, Fix-Vorschlag.
Zeitboxe es:
Ziel ist keine perfekte Abdeckung. Es geht um eine kleine Menge testbarer Befunde.
Habe die App offen, während du liest. Klick dich durch die UI und beobachte, welche Requests ausgelöst werden. Notizen sollten auf spezifische Endpoints, Parameter und Datenquellen verweisen.
Ein Workflow, der in einer Sitzung passt:
Eine nützliche Gewohnheit: Für jedes "scheint in Ordnung" schreibe, wie du es kaputtprüfen würdest. Wenn du keinen Bruchversuch beschreiben kannst, hast du es wahrscheinlich nicht verifiziert.
Authentifizierung ist der Punkt, an dem die App entscheidet: „Diese Anfrage gehört zu dieser Person." Ein schneller Spot-Check geht nicht jede Zeile durch. Er findet die Stelle, an der Identität hergestellt oder akzeptiert wird, und prüft Abkürzungen und Fehlerpfade.
Finde die Vertrauensgrenze: Wo wird Identität zuerst erstellt oder akzeptiert? Das kann ein Session-Cookie, ein JWT-Bearer-Token, ein API-Key oder mTLS am Edge sein. Bitte Claude Code, die genaue Datei und Funktion zu nennen, die "anonymous" in eine User-ID verwandelt, und alle anderen Pfade, die das ebenfalls tun können.
Authn-Checks, die sich lohnen zu scannen:
Ein praktisches Beispiel: Wenn Reset-Mails "Account nicht gefunden" zurückgeben, ist das ein schnelles Enumeration-Problem. Auch mit generischer Meldung können Timing-Unterschiede dieselbe Info leaken, also prüfe Antwortzeiten.
Autorisierung verursacht den meisten Schaden, wenn sie falsch ist: "Darf dieser Nutzer diese Aktion auf genau dieser Ressource durchführen?" Ein schneller Spot-Check sollte diese Annahme absichtlich zu brechen versuchen.
Formuliere Rollen und Berechtigungen in plainer Sprache. Halte es menschlich:
Verifiziere dann, dass jede sensitive Aktion die Autorisierung serverseitig durchsetzt, nicht nur in der UI. Buttons können verborgen werden, Routen im Client blockiert sein — ein Angreifer kann trotzdem direkt die API aufrufen.
Ein Scan, der oft echte Probleme findet:
Der klassische IDOR-Geruch ist simpel: eine Anfrage wie GET /projects/{id}, wobei {id} kontrolliert ist und der Server es lädt, ohne zu prüfen, ob es zum aktuellen Nutzer oder Tenant gehört.
Ein Prompt, der eine echte Antwort erzwingt:
"Für diesen Endpoint zeig den exakten Code, der den Zugriff entscheidet, und liste die konkreten Bedingungen auf, die es einem Nutzer einer anderen orgId erlauben würden, darauf zuzugreifen. Wenn keine, erkläre warum mit Datei- und Funktionsnamen."
Die meisten schnellen Web-App-Probleme beginnen mit einer Lücke: Die App akzeptiert Eingaben, die der Entwickler nicht erwartet hat. Betrachte "Input" als alles, was ein Nutzer oder ein anderes System beeinflussen kann, auch wenn es harmlos erscheint.
Beginne damit, die Eingaben für den Endpoint zu benennen, den du prüfst:
Validierung sollte nahe der Stelle passieren, an der Daten in die App treten, nicht tief in der Business-Logik. Prüfe die Basics: Typ (String vs. Number), Maximallänge, Pflicht vs. optional und Format (E-Mail, UUID, Datum).
Für bekannte Werte wie Rollen, Status-Felder oder Sortierrichtungen bevorzuge eine Allowlist. Das ist schwerer zu umgehen als "ein paar böse Werte blockieren".
Prüfe auch das Fehlerhandling. Wenn die App Eingaben ablehnt, echo nicht den rohen Wert in der Antwort, in Logs oder der UI. So werden kleine Validierungsfehler zu Datenlecks oder Injection-Hilfen.
Ein kurzer "Bad Input" Mini-Plan für riskante Endpoints (Login, Search, Upload, Admin-Aktionen):
Beispiel: Ein Sort-Parameter, der beliebige Strings akzeptiert, kann später zu einem SQL-Fragment werden. Eine Allowlist wie "date" oder "price" verhindert diese Fehlerklasse früh.
Die meisten schnellen Reviews finden Probleme an denselben wenigen Stellen: überall dort, wo Nutzereingabe als Code, Query, Pfad oder URL interpretiert wird. Hier suchst du nach Momenten, in denen "Input eine Vertrauensgrenze überquert".
Verfolge Daten von Entry-Points (Query-Params, Header, Cookies, Uploads, Admin-Formulare) bis zu ihren Zielorten.
Achte auf diese Muster und verlange für jedes einen konkreten Call-Site- und Payload-Beispiel:
ORDER BY, und IN (...)-Builder, die Werte zusammenfügenAchte auch auf Deserialisierung und Template-Injection. Alles, was nutzer-providiertes JSON, YAML oder template-basierte Strings parst, kann riskantes Verhalten verbergen, besonders bei Unterstützung für benutzerdefinierte Typen, Ausdrücke oder serverseitiges Rendering.
Wenn ein Feature eine URL, einen Dateinamen oder formatierten Text akzeptiert, gehe davon aus, dass es missbraucht werden kann, bis du den Codepfad und Tests geprüft hast.
Probleme mit Geheimnissen sind oft laut, sobald du weißt, wo du suchen musst. Konzentriere dich darauf, wo Geheimnisse leben und wo sie versehentlich kopiert werden.
Häufige Orte, an denen Geheimnisse auftauchen:
Fordere dann eine konkrete Antwort: Wenn ein Geheimnis heute exponiert ist, was passiert als Nächstes? Ein gutes System hat einen Rotationspfad (neuer Key), Widerruf (alter Key deaktiviert) und schnellen Redeploy. Wenn die Antwort "wir würden es später ändern" lautet, behandle das als Befund.
Least-Privilege ist ein weiterer schneller Gewinn. Vorfälle werden schlimmer, weil Keys zu mächtig sind. Suche nach DB-Usern, die Tabellen droppen können, Third-Party-Tokens, die Konten verwalten, oder API-Keys, die über Umgebungen geteilt werden. Bevorzuge einen Key pro Service, pro Umgebung, mit minimalen Rechten.
Kurze Spot-Check-Prompts, die du in Claude Code einfügen kannst:
Bestätige schließlich Guardrails: blockiere Geheimnisse im Source Control (Pre-Commit/CI-Checks) und stelle sicher, dass Backups oder Snapshots keine Klartext-Zugangsdaten enthalten. Wenn deine Plattform Snapshots und Rollbacks unterstützt, verifiziere, dass Geheimnisse zur Laufzeit injiziert werden, nicht in gespeicherte Images gebacken sind.
Vage Prompts liefern vage Antworten. Zwinge das Modell, sich zu Belegen zu verpflichten: exakte Orte, einen Trace, eine Repro, und was die Behauptung widerlegen würde.
Nutze jeweils ein Muster und lass es nach Bestätigung oder Ablehnung überarbeiten.
Wenn die Ausgabe noch unscharf ist, pinne sie fest:
"Answer only with: file path, function name, risky line, and one-sentence impact."
Profile-Update-Endpoints verbergen oft Access-Control-Bugs. Hier ein kleiner Fall, den du durch die Checkliste laufen lassen kannst.
Scenario: Ein API-Endpoint aktualisiert ein Nutzerprofil:
PATCH /api/profile?accountId=123 mit JSON wie { "displayName": "Sam" }.
Du bittest Claude Code, den Handler zu finden, nachzuverfolgen, wie accountId verwendet wird, und zu beweisen, ob der Server Ownership durchsetzt.
Was häufig auftaucht:
accountId aus dem Query-String und updated dieses Konto, ohne zu prüfen, ob es zum eingeloggten Nutzer gehört.displayName wird getrimmt, aber accountId nicht als Integer validiert."... WHERE account_id=" + accountId.Eine gute Zusammenfassung ist konkret:
accountId modifiziert wird; SQL wird aus untrusted Input gebautaccountId vom Client, nutze die authentifizierte Account-ID serverseitig; parameterisiere die QueryaccountId abNach dem Patch schnell erneut prüfen:
accountId und bestätige, dass sie fehlschlägt.Der schnellste Weg, eine Vulnerability zu übersehen, ist, dem zu vertrauen, was die UI durchzusetzen scheint. Ein Button, der verborgen oder deaktiviert ist, ist keine Berechtigungsprüfung. Wenn der Server die Anfrage trotzdem annimmt, kann jeder sie mit einer anderen User-ID, Rolle oder direktem API-Call wiederholen.
Eine weitere häufige Lücke ist eine vage Anfrage. "Mach ein Security-Review" liefert meist einen generischen Report. Ein Spot-Check braucht einen engen Scope (welche Endpoints, welche Rollen, welche Daten) und ein striktes Ausgabeformat (Dateiname, Funktion, riskante Zeile, minimaler Repro).
Dasselbe gilt für KI-Ausgaben: Akzeptiere keine Behauptungen ohne Verweise. Wenn ein Befund keinen konkreten Code-Ort und keinen Schritt-für-Schritt-Trigger enthält, behandle ihn als unbelegt.
Diese Fallen treten immer wieder auf:
Wenn du dich erwischst, nach jedem neuen Edge-Case noch einen Filter hinzuzufügen, stoppe. Die Lösung ist meist einfacher und früher: validiere Eingaben an der Grenze und mache Autorisierung explizit und zentral, sodass jeder Codepfad sie nutzt.
Diese ersetzen kein vollständiges Review, fangen aber Fehler, die einschleichen, wenn alle müde sind. Halte sie auf das fokussiert, was du schnell beweisen kannst: eine Anfrage, die du senden kannst, eine Seite, die du laden kannst, eine Log-Zeile, die du finden kannst.
Fünf schnelle Spot-Checks, die sich meist auszahlen:
Schreibe die Top-3-Fixes auf, die du diese Woche ausliefern kannst, nicht eine Wunschliste. Beispiel: (1) Rate-Limiting für Login und Passwort-Reset hinzufügen, (2) serverseitige Ownership-Checks beim "get by id" Endpoint erzwingen, (3) Input-Längen begrenzen und unerwartete Zeichen für das Suchfeld ablehnen.
Ein Spot-Check zahlt nur dann, wenn die Ergebnisse beeinflussen, was du auslieferst. Behandle diese Checkliste als kleinen, wiederholbaren Build-Schritt, nicht als einmalige Rettungsaktion.
Mach aus jedem Befund ein Backlog-Item, das schwer misszuverstehen ist:
Wähle eine Kadenz, die zu deinem Risiko und Team passt. Für viele Teams ist jedes Release ideal. Wenn Releases häufig sind, mache monatlich einen 30–60 Minuten-Review und eine kürzere Prüfung vor dem Shipping.
Erleichtere Wiederholbarkeit durch ein wiederverwendbares Prompt-Pack und eine Checklisten-Vorlage. Halte Prompts fokussiert auf konkrete Outputs: zeig die Route, die Guard, die fehlschlagende Anfrage und das erwartete Verhalten. Speichere das Pack dort, wo dein Team ohnehin arbeitet, damit es nicht übergangen wird.
Wenn du Apps per Chat entwickelst, verankere die Checkliste bereits in der Planung. Füge eine kurze "Security assumptions"-Notiz für Authn/Authz, Eingaben und Geheimnisse hinzu und führe den Spot-Check direkt nach der ersten lauffähigen Version aus.
Plattformen wie Koder.ai (koder.ai) passen gut zu dieser Gewohnheit, weil sie schnelle Iteration erlauben und Review-Checkpoints erhalten. Snapshots und Rollback um riskante Änderungen herum machen es leichter, Security-Fixes auszuliefern, ohne in Schwierigkeiten zu geraten, wenn sich Verhalten ändert.