Sichere Web-App-Programmierung
Verwandelt OWASP Top 10:2025, ASVS 5.0, die Cheat Sheet Series und ausgewähltes WSTG-Material in praktische Sicherheitsleitlinien für Webanwendungen.
Standard (inline): Sicherheitsbewusst programmieren ohne große Erklärungen; nur das wichtigste Sicherheitsproblem in der Nähe anzeigen.
Audit: Bei Aufforderung mit "review", "audit", "harden", "is this secure?" oder einer Incident-Nachbereitung — lies assets/audit-checklist.md und erstelle priorisierte Ergebnisse.
Modi, aufgerufen als $secure-webapp <modus>:
$secure-webapp audit: vollständige priorisierte Überprüfung; liesassets/audit-checklist.md.$secure-webapp quick-check: nur die höchsten Risiken prüfen — Autorisierung, Authentifizierung/Session, Geheimnisse, Injection/XSS, Uploads, SSRF, Tokens. Kein vollständiger Checklistenbericht.$secure-webapp harden: sichere Änderungen direkt anwenden, wo Bearbeitungen autorisiert sind; kleine Patches, die die Architektur erhalten; überprüfen und ggf. Produktfreigabe anfordern.$secure-webapp remediate: iterativer Audit→Fix-Loop; lies zuerstassets/remediate-checklist.mdvollständig.$secure-webapp design-review: Bedrohungsmodell vor der Implementierung — Annahmen, Vertrauensgrenzen, Missbrauchsfälle, zwingend erforderliche Kontrollen, offene Fragen.$secure-webapp report: Erstelle einen formellen Bericht indocs/security-audit-report-YYYY-MM-DD.md; lies zuerstassets/report-template.mdvollständig und befolge jeden Schritt. Erfordert ein vorheriges Audit in dieser Sitzung. Schreibe die Datei, nie in den Chat.$secure-webapp update: Selbstaktualisierung dieser Installation durch Ausführen vonnpx --yes github:hov172/secure-webapp-skill --global. Es prüft die Version und installiert nur neu, wenn eine neuere Version existiert. Flags:--claude/--codex/--gemini,--check,--force.$secure-webapp maintain: Aktualisiere das Skill-Paket selbst, aus einem Klon des Quell-Repositorys — siehescripts/README.md.
Lade nur die Referenzen, die die Aufgabe benötigt. Lade niemals alle auf einmal.
Routings
| Aufgabe betrifft | Lade |
|---|---|
| Nicht vertrauenswürdige Zeichenketten, die als HTML/DOM/SQL/Shell/NoSQL/LDAP/Regex/CSV interpretiert werden | references/input-handling.md |
| Login, Registrierung, Passwörter, MFA, Zurücksetzen, Brute-Force, Sessions, Cookies, Logout | references/auth-and-sessions.md |
| Berechtigungen, Rollen, Eigentümerprüfungen, IDOR, Mandantenisolierung | references/authorization.md |
| JWTs, API-/Refresh-Tokens, Signierung und Verifizierung, OAuth/OIDC, PKCE, State | references/tokens-and-oauth.md |
| REST/GraphQL/WebSocket-Endpunkte, Ratenbegrenzung, Massenzuweisung, Antwortform, Uploads/Downloads, Path Traversal, Pre-Signed-URLs | references/apis-and-files.md |
| Secure/HttpOnly/SameSite, CSP, CORS, CSRF, Header, Iframes, postMessage | references/frontend-and-headers.md |
Umgebungsvariablen, .env, Schlüssel, Secrets Manager, Debug-Modus, Standardwerte | references/secrets-and-config.md |
| Verschlüsselung, Passwort-Hashing, Algorithmen, Schlüsselverwaltung, PII | references/data-and-crypto.md |
| Abhängigkeiten, Lockfiles, SBOM, CI/CD, GitHub Actions, signierte Artefakte | references/supply-chain.md |
| Benutzerkontrollierte externe URLs, SSRF, Race Conditions, Deserialisierung, Prototype Pollution | references/secure-coding.md |
| Logging, Fehlerantworten, Stack Traces, Prüfpfade, Fail-Closed, Rollback | references/logging-and-errors.md |
| Design neuer Funktionen, Bedrohungsmodellierung, Multi-Tenancy, Secure-by-Design-Entscheidungen | references/insecure-design.md |
| LLM/KI-Funktionen, Prompt-Konstruktion, RAG, Agent-Tool-Aufrufe, MCP-Server, gerenderte oder ausgeführte Modellausgaben | references/ai-and-llm.md |
Immer-Aktive-Watchlist
Markiere diese Probleme beiläufig, wenn sie in Web-Code gesehen werden, mit einer konkreten Korrektur:
- Fehlende serverseitige Authentifizierungs-/Eigentumsprüfungen auf Ressourcen-Routen. Bevorzuge Query-Ebene-Scoping wie
WHERE owner_id = :current_user. - Hartcodierte Geheimnisse, Anmeldeinformationen, JWT-Geheimnisse, API-Schlüssel oder eingecheckte
.env-Dateien. - String-basierte SQL/NoSQL/Shell-Abfragen. Verwende parametrisierte Abfragen, sichere Builder oder argv-APIs.
- Klartext- oder schnell gehashte Passwörter. Verwende argon2id, scrypt oder bcrypt; PBKDF2 nur, wenn erforderlich.
- JWT-Verifizierung mit nicht fixierten Algorithmen, fehlenden
exp/iss/aud-Prüfungen oder Geheimnissen im Code. dangerouslySetInnerHTML,v-htmloderinnerHTMLmit Benutzerinhalten. Als Text rendern oder bereinigen.- Berechtigte CORS mit Wildcard- oder geechoeten Ursprüngen. Verwende eine strenge Allowlist.
- Fehlende Ratenbegrenzung bei Login, Registrierung, Zurücksetzen, MFA/OTP oder teuren Endpunkten.
- Ausführliche Produktionsfehler, Stack Traces, SQL/ORM-Details oder Debug-Modus, die an Clients weitergegeben werden.
- Offene Weiterleitungen von nicht validierten
next-,returnTo- oder URL-Parametern. - SSRF von benutzergelieferten URLs ohne Allowlists und Private-IP-Blockierung nach DNS und Weiterleitungen.
- Protokolle, die Passwörter, Tokens, Session-IDs, Geheimnisse oder unnötige PII enthalten.
- Nur clientseitige Sicherheitskontrollen: versteckte Felder, deaktivierte Buttons, Client-Rollenansprüche, Frontend-only-Validierung.
- Datei-Uploads ohne Größen-, Typ-, Pfad-, Speicher- oder generierte Namens-Kontrollen.
- Fail-Open-Ausnahmepfade bei Authentifizierung, Autorisierung, Ratenbegrenzung, Feature-Flags oder Transaktionen.
- Nicht-atomare Statusänderungen für Guthaben, Kontingente, Zahlungen, Bestand, Gutscheine oder Einmal-Token.
- Modell/LLM-Ausgabe, die ungeprüft ein Ziel erreicht —
innerHTML, Shell, SQL, Dateipfade,fetch-URLs oder ein nachgelagerter Agent. Behandle sie als nicht vertrauenswürdige Eingabe. - Agent-Tool-Aufrufe, die gegen das Service-Konto und nicht gegen den Endbenutzer autorisiert sind, oder generische
run_shell-/execute_sql-/http_request-Tools, die Prompt Injection in RCE, SQLi oder SSRF verwandeln. - Nicht vertrauenswürdiger Text, der in einen System-Prompt eingefügt wird; Geheimnisse oder Daten anderer Benutzer im Modellkontext.
- Veränderbare Abhängigkeits- oder CI-Action-Referenzen, wo Pinning und Lockfiles erwartet werden — ein verschobener Tag führt Angreifer-Code in diesem Job mit dessen Geheimnissen aus. Bewerte als Hoch, wenn der Job Bereitstellungs-Anmeldeinformationen, Signierschlüssel oder Veröffentlichungsrechte hält; Gleiches gilt für langlebige Cloud-Anmeldeinformationen, wo OIDC existiert. Überprüfe jeden Workspace in einem Monorepo und markiere ein
--audit-levelschwächer alshigh.
Verhalten
- Schreibe standardmäßig sicheren Code, ohne lange Erklärungen. Nenne sicherheitsrelevante Entscheidungen kurz, wenn nützlich.
- Passe die Gründlichkeit an die Bedeutung der App an; erzwinge keine Unternehmenskontrollen in Wegwerf-Prototypen.
- Erstelle niemals absichtlich unsicheren Code. Biete die sichere Alternative an und nenne die Einschränkung in einem Satz.
- Bei neuen Vertrauensgrenzen-Funktionen prüfe: nicht vertrauenswürdige Eingabe, Autorisierung, Fehlermodus, gespeicherte Daten, Missbrauchspfad.
- Bei Audits inspiziere echten Code, stelle nur wesentliche Abgrenzungsfragen und melde Schweregrad + Ort + Beweis + Korrektur, priorisiert.
- Zitiere OWASP-Anforderungsnummern nicht, es sei denn, du wirst danach gefragt.
- Behaupte nicht, Penetrationstests durchzuführen; dies ist eine Code- und Design-Überprüfung.
Umfang
Gängige Web-Stacks — Next.js, Express, Django, Flask, FastAPI, Rails, Spring, Laravel, Go und ähnliche. Für Nischenbereiche, die die Referenzen nicht abdecken, weise darauf hin und verweise auf die relevante OWASP-Quelle, anstatt zu raten.
Agenten-unabhängig: Funktioniert in Claude Code, Codex, Gemini CLI und allem anderen, das Fähigkeiten lädt oder AGENTS.md/GEMINI.md liest. Wo diese Datei ein Tool benennt, verwende dein eigenes Äquivalent.