Thema: input-validation
-
Native HTML-Formularvalidierung: required, pattern, type und die Constraint Validation API
HTML validiert Formularfelder vor dem Absenden ganz ohne Skript: required, minlength, min/max, pattern und typisierte Eingaben definieren Bedingungen, der Browser blockiert das Absenden und zeigt eine Meldung, CSS kann :user-invalid stylen, und die Constraint Validation API macht denselben Zustand für Skripte zugänglich. Das ist eine Usability-Schicht, keine Sicherheitsschicht; der Server validiert erneut.
-
Datei-Uploads von Nutzern validieren, speichern und ausliefern
Nur die Dateitypen akzeptieren, die das Feature braucht; den Typ per Erlaubnisliste der Endung plus Inhaltsprüfung bestimmen statt über den Content-Type des Clients; auf eine zufällige Kennung umbenennen; Grössenlimiten vor und nach der Dekomprimierung durchsetzen; ausserhalb des Web-Roots oder auf einem separaten Host speichern und über einen Handler ausliefern, der Typ, nosniff und Content-Disposition setzt, idealerweise von einem separaten Ursprung aus.
-
Offene Weiterleitungen: prüfen, wohin ein next-Parameter führen darf
Eine Weiterleitung, deren Ziel aus der Anfrage stammt, erlaubt es Angreifenden, Links auf der eigenen Domain zu erzeugen, die auf ihrer eigenen Seite enden; nur zu relativen Pfaden oder zu einer Positivliste von Ursprüngen weiterleiten, oder kurze Kennungen serverseitig auf Ziele abbilden. Den Host einer URL zu prüfen ist schwieriger, als es scheint: Die Python-Dokumentation warnt, dass urlsplit seine Eingabe nicht validiert.
-
Grundlagen des Fuzz-Testings: coverage-gesteuerte Eingaben, Korpora und Crash-Triage
Ein coverage-gesteuerter Fuzzer mutiert Eingaben, behält jene, die neuen Code erreichen, in einem Korpus, und meldet minimierte fehlschlagende Eingaben. Kleine deterministische Ziele schreiben, die Eigenschaften prüfen, den Korpus säen und committen, kurzes Fuzzing in der CI und lange Läufe nach Zeitplan durchführen und jede Crash-Eingabe als Regressionstest behalten.
-
Sichere Archivextraktion: Path Traversal bei zip und tar
Archiveinträge können Namen wie ../../etc/passwd oder absolute Pfade und Symlinks tragen; erst extrahieren, nachdem der jeweilige Zielpfad aufgelöst und geprüft wurde, dass er innerhalb des Zielverzeichnisses bleibt, Links, die nach aussen zeigen, ablehnen und Gesamtgrösse sowie Anzahl der Einträge begrenzen.
-
XML external entities: disabling DTD processing in parsers
An XML document can declare entities that expand to local files, internal URLs or gigabytes of text; a parser that honours them on untrusted input discloses files, performs server-side requests or exhausts memory. Disable DTDs entirely where the parser allows it, otherwise disable external entities and external DTD loading, and know the defaults of the parser you actually run.
Maschinenlesbar: JSON