Kapitel 12
Die Karte und wohin es weitergeht
Die Karte und wohin es weitergeht
Kapitel 11 war die letzte Bewertung. Diese Lektion bringt keine Arbeit. Sie ordnet das, was du getan hast, auf einer Karte ein, die auch andere Leute benutzen, sagt, was die Site bewiesen hat, und hilft dir zu wählen, wohin du als Nächstes gehst.
Das kannst du jetzt, was du zu Beginn des Kurses nicht konntest. Du schreibst einen Befund als Zeile mit einem Test, der den Angriff ausführt. Du speicherst ein Passwort als gesalzenen scrypt-Datensatz und wendest für einen Namen, den es nicht gibt, dieselbe Arbeit auf. Du führst
Die Karte
Die OWASP Top Ten sind eine Rangliste von Kategorien von Schwächen in Webanwendungen, die alle paar Jahre überarbeitet wird. Sie sind eine Karte für Gespräche, keine Checkliste.
Die Tabelle ordnet diesen Kurs in die Ausgabe 2025 ein. Die mittlere Spalte sagt, wo du an einer Kategorie gearbeitet hast. Die letzte Spalte sagt, was der Kurs nur gestreift oder gar nicht berührt hat.
| Kategorie (2025) | Wo du daran gearbeitet hast | Nur gestreift oder gar nicht berührt |
|---|---|---|
| A01 Broken Access Control | Kapitel 6 (Eigentümer, Ablehnung als Standard, 404 für das Buch eines anderen Lesers); 7.5 und 7.6 (Ziele von | Server-Side Request Forgery; Rollen jenseits von „darf schreiben“ |
| A02 Security Misconfiguration | 4.4 ( | Server- und Cloud-Konfiguration, Standardkonten |
| A03 Software Supply Chain Failures | Nicht geübt. Der Kurs hat absichtlich die Standardbibliothek verwendet | Abhängigkeiten, ihre Updates und ihre Prüfung |
| A04 Cryptographic Failures | Kapitel 2 (Tags mit Schlüssel, Vergleich); Kapitel 3 (Passwort-Datensätze); Kapitel 5 (Umgang mit Schlüsseln, Rotation); 10.1 bis 10.3 (Zertifikate, verifizierende Kontexte) | Verschlüsselung, Schlüsselaustausch, Wahl von Algorithmen |
| A05 Injection | Kapitel 7 (Header, Seite); die SQL-Vorschau aus 7.3 | SQL in der Praxis, eine Shell, ein Skript, das in einer echten Seite läuft |
| A06 Insecure Design | Kapitel 1 (Schutzgüter, Angreifer, Vertrauensgrenzen, Befunde); 6.4 (die Abwägung bei der Sperre); F14 mit seiner Gegenmaßnahme offen gelassen | Design-Reviews im Maßstab eines Teams |
| A07 Authentication Failures | Kapitel 3 (eine Antwort für jede falsche Anmeldung); Kapitel 4 (Sessions); 5.2 und 5.6 (Tokens, die ablaufen); 6.3 und 6.4 (Grenzen für Versuche) | Anmeldung mit mehreren Faktoren, Passkeys, Zurücksetzen von Passwörtern |
| A08 Software or Data Integrity Failures | 5.1 und 5.2 (vor der Verwendung verifizieren); 7.1 (Felder, die der Client nicht setzen darf) | Signierte Updates, Build-Pipelines, pickle |
| A09 Security Logging and Alerting Failures | 6.5 (Logs ohne Geheimnisse) | Alarmierung, Speicherung von Logs, alles in großem Maßstab |
| A10 Mishandling of Exceptional Conditions | 5.4 (ohne Schlüssel nicht starten); 6.6 (ein fester 500-Body, kein | Erschöpfung von Ressourcen, Teilausfälle |
Zwei Einordnungen, die man leicht übersieht
Zwei Dinge, die du gebaut hast, gehören zu A10, der Kategorie für falsch behandelte Ausnahmesituationen. In 5.4 weigert sich dein Server zu starten, wenn er keinen Schlüssel hat, wo ein schwächerer Server auf einen Standardwert zurückfällt. In 6.6 antwortet dein Server mit einem festen 500-Body, wenn sein eigener Code versagt, wo ein schwächerer Server den Traceback sendet. Beide schlagen geschlossen fehl („fail closed“).
Server-Side Request Forgery heißt, einen Server dazu zu bringen, eine
Was die Site bewiesen hat, und was nicht
Jede Prüfung, die du bestanden hast, hat deine Funktionen mit Benutzern, Büchern, Schlüsseln und Zeiten aufgerufen, die du nicht gesehen hattest, oder deine Tests gegen andere Server laufen lassen, um zu sehen, ob sie etwas bemerken. Die Läufe von pl_sec.py auf 127.0.0.1 waren zum Zuschauen da. Keine Bewertung hing von ihnen ab.
Manches hat dieser Kurs absichtlich nie berührt. Kein echter Browser hat deine Seite geladen. Was ein Browser mit einem Cookie, einem Header Origin oder einer CORS-Antwort macht, war ein Modell, das du geschrieben hast, kein Browser auf der Site. Keine öffentliche Zertifizierungsstelle hat irgendetwas ausgestellt: Der Test-Zertifizierungsstelle wurde nur vertraut, weil dein Client ihre Datei bekommen hat. Nichts wurde deployt, und kein Proxy und kein vorgeschalteter Server stand vor deinem Code. Nichts wurde gemessen, also hat keine Prüfung gezeigt, wie lange ein Vergleich oder ein Hash dauert.
Und ein Befund ist noch offen. F14 sagt, dass ein signiertes Token, das durchsickert, funktioniert, bis es abläuft. Du hast seine Lebensdauer auf 15 Minuten verkürzt und keine Liste zurückgezogener Tokens gebaut.
Wähl einen Weg
Jeder Weg unten ist optional und wird nicht bewertet. Wähl einen, nicht sechs.
Build a Web API with CORSMiddleware konfiguriert wird, und vergleich das mit deinem cors_headers(). Fertig, wenn du sagen kannst, welche Funktionen dieses Kurses ein Framework ersetzt und welche deine bleiben.
Anmeldeprotokolle: OAuth, OpenID Connect, Passkeys. Ziel: Anmeldung ohne ein Passwort, das dein Dienst speichert. Erster Schritt: Lies die Beschreibung des Authorization Code Flow bei einem OpenID-Connect-Anbieter und finde darin das ID-Token. Ein ID-Token ist ein JWT, das Token-Format, das 5.1 genannt hat. Fertig, wenn du sagen kannst, wo das exp, die Schlüssel-ID und die Signatur aus Kapitel 5 in einem ID-Token vorkommen.
Angewandte Kryptografie. Ziel: Verschlüsselung und Public-Key-Signaturen, die dieser Kurs nur genannt hat. Erster Schritt: Lies die Seite des Pakets cryptography über authentifizierte Verschlüsselung. Fertig, wenn du sagen kannst, was authentifizierte Verschlüsselung einem Tag mit Schlüssel wie sign() aus Kapitel 2 hinzufügt, und wann du sie brauchen würdest.
Sicherheit im Browser. Ziel: das echte Ding, für das das Modell stand. Erster Schritt: Öffne die Entwicklerwerkzeuge eines Browsers auf einer Site, auf der du ein Konto hast, melde dich an und finde den Header Origin bei der Anmeldeanfrage und die Attribute des Cookies, das zurückkommt. Fertig, wenn du eine Entscheidung nennen kannst, bei der sich ein echter Browser von mini_browser.py unterscheidet.
Deployment. Ziel: ein echtes Zertifikat, ein vorgeschalteter Server und HSTS, das etwas bedeutet. Erster Schritt: Lies, wie eine kostenlose Zertifizierungsstelle die Kontrolle über einen Namen nachweist. Fertig, wenn du zeichnen kannst, wo state["https"] gesetzt würde.
Working with Real APIs. Ziel: die Perspektive des Clients bei Schlüsseln, Limits und Tokens. Erster Schritt: Finde heraus, wo die Client-Bibliothek eines Anbieters ihren Schlüssel aufbewahrt. Fertig, wenn ein Client von dir seinen Schlüssel aus der Umgebung liest und sich ohne ihn weigert zu starten.
Welchen Weg du auch nimmst, vier Gewohnheiten aus diesem Kurs gehen mit dir. Ein Befund hat einen Test. Lehne ab, außer eine Regel erlaubt es. Validiere auf dem Weg hinein und schütze auf dem Weg hinaus. Ein Schlüssel lebt nie im