


Backend-Code beim Ändern vor Angriffen über Uploads und Nutzereingaben schützen
Nutze dies, wenn eine KI Backend-Code ändert, der Uploads, Archive oder Anfragedaten verarbeitet. Sie verfolgt externe Daten, prüft sie vor der Nutzung, behebt alle ähnlichen Codepfade und schließt mit einer Sicherheits-Checkliste sowie bestandenem Lint und Tests ab.
Diese KI-Regeln verwenden
## Vor Änderungen den Weg externer Daten verfolgen und ähnliche Codepfade finden
Gehe davon aus, dass hochgeladene Dateien, Archivinhalte, Anfrageparameter, Manifeste, Metadaten und Gerätekennungen von Angreifern kontrolliert sein können, selbst wenn der Benutzer authentifiziert ist.
Bevor du einen sicherheitsrelevanten Codepfad änderst:
1. Ermittle, wo nicht vertrauenswürdige Daten eintreten, wie sie umgewandelt werden und welche Datei-, Prozess-, Datenbank-, Darstellungs-, Weiterleitungs- und Netzwerkvorgänge sie erreichen können.
2. Suche nach verwandten Implementierungen, die denselben Vorgang ausführen. Berücksichtige alternative Formate, API- und Webansichten, Binär- und Quelltextabläufe sowie ältere Aufrufstellen.
3. Verwende zentrale Sicherheitsfunktionen erneut oder erweitere sie, anstatt behelfsmäßige Prüfungen über Ansichten und Verarbeitungsfunktionen zu verteilen.
4. Prüfe frühere Schwachstellenmuster, sofern sie verfügbar sind, insbesondere unvollständige Korrekturen, die nur einen Pfad geschützt haben.
5. Halte Importe und lokale Konventionen einheitlich und führe anschließend die erforderliche statische Codeprüfung sowie gezielte Tests aus, bis sie erfolgreich beendet werden.
Eine Sicherheitskorrektur ist unvollständig, wenn ein gleichwertiger Pfad den anfälligen Vorgang weiterhin erreichen kann.
## Anfragedaten und Uploads am Eingang prüfen sowie Anmeldung und Berechtigung verlangen
Prüfe unverarbeitete Eingaben, bevor sie zu einem Pfad, Befehlsargument, Abfragewert, Weiterleitungsziel, dargestellten Text oder externen Zielrechner werden.
- Verwende typisierte Formulare oder Schemata als primäre Prüfschicht.
- Verwende Auswahlfelder mit endlicher Wertemenge für Parameter, deren gültige Werte bekannt sind.
- Lege die feldspezifische Ablehnungslogik in der Prüfschicht ab und gib bei einer fehlgeschlagenen Prüfung eine einheitliche Fehlerantwort zurück.
- Prüfe Kennungen anhand ihres genauen Formats, bevor du sie in Pfaden oder Suchvorgängen verwendest.
- Prüfe Dateisignaturen, Größenbegrenzungen und Listen erlaubter Erweiterungen für hochgeladene Dateien; eine Erweiterung allein reicht nicht aus.
- Behandle Werte aus Manifesten und Metadaten als nicht vertrauenswürdige Eingaben.
Sicherheitsrelevante Verarbeitungsfunktionen müssen alle zutreffenden Kontrollen anwenden:
- Authentifizierung;
- rollen- oder berechtigungsbasierte Autorisierung;
- ausdrückliche Beschränkung der HTTP-Methode;
- CSRF-Schutz für vom Browser ausgelöste Zustandsänderungen.
Deaktiviere die Maskierung von Vorlagen nicht und kennzeichne nicht vertrauenswürdige Inhalte nicht als sicher. Wenn du eine Ausgabe außerhalb einer automatisch maskierenden Vorlage erstellst, kodiere den Wert passend zum Zielkontext.
## Dateipfade und ZIP/TAR-Entpacken im vorgesehenen Ordner halten
Verwende zwei Schutzschichten für Dateisystempfade:
1. Lehne gefährliche Rohformen wie Traversierungssegmente, absolute Pfade, kodierte Umgehungen und ungültige Zeichen ab.
2. Löse den Pfad nach seiner Erstellung kanonisch auf und prüfe, ob er innerhalb des vorgesehenen Stammverzeichnisses bleibt.
Wenn ein Vorgang eine reguläre Datei erwartet, lehne symbolische Verknüpfungen, benannte Datenkanäle, Gerätedateien und andere unerwartete Arten ab, bevor du das Dateisystemobjekt liest.
Für die TAR-Entpackung:
- Bevorzuge einen von der Laufzeitumgebung bereitgestellten, für jeden Eintrag einzeln arbeitenden und typbewussten Entpackungsfilter, der Traversierungen, absolute Pfade, Gerätedateien und aus dem Zielverzeichnis herausführende Verknüpfungen ablehnt.
- Verlasse dich nicht auf eine Prüfung, die nur den Namen oder `abspath` verwendet; sie löst symbolische Verknüpfungen nicht auf.
- Ist kein sicherer eingebauter Filter verfügbar, lehne symbolische und harte Verknüpfungen ab, löse das Ziel mit `realpath` auf und prüfe es unmittelbar vor dem Entpacken jedes Eintrags.
- Vermeide eine Sammelprüfung mit anschließender Sammelentpackung, da sich der Zustand des Dateisystems zwischen beiden Phasen ändern kann.
Für die ZIP-Entpackung:
- Prüfe jeden Eintragsnamen vor dem Entpacken auf Traversierung.
- Löse das vorgesehene Ziel auf und prüfe, ob es innerhalb des Stammverzeichnisses für die Entpackung liegt.
- Entpacke einen Eintrag erst, nachdem er beide Prüfungen bestanden hat.
Jede fehlgeschlagene Schutzprüfung muss den unsicheren Vorgang mit `continue`, `return` oder `raise` stoppen. Eine Warnung zu protokollieren, ohne die Ausführung zu blockieren, ist keine Sicherheitskontrolle.
## Nutzereingaben je nach Verwendung entschärfen, etwa in SQL oder Shell-Befehlen
- Übergib Argumente für Unterprozesse als Liste. Füge nicht vertrauenswürdige Eingaben niemals in eine Zeichenkette mit einem Systembefehl ein.
- Verwende parametrisierte ORM- oder Abfragegeneratorvorgänge. Erzeuge SQL niemals durch Zeichenkettenformatierung.
- Maskiere benutzergesteuerte Inhalte, bevor du sie außerhalb eines automatisch maskierenden Kontexts darstellst.
- Bereinige aktive Formate wie SVG vor der Anzeige.
- Entferne Zeilenumbrüche und Steuerzeichen aus benutzerabhängigen Protokollfeldern, um das Einschleusen manipulierter Protokolleinträge zu verhindern.
- Erzeuge sichere Dateinamen, bevor du sie in Antwortkopfzeilen einfügst.
- Erlaube nur geprüfte relative Weiterleitungsziele.
- Löse vor externen Anfragen den Zielrechner auf und prüfe ihn. Lehne Rückschleifenadressen, private Adressen, verbindungslokale Adressen, Mehrfachübertragungsadressen und andere verbotene Adressbereiche ab.
Wende kontextspezifische Prüfungen statt einer einzigen allgemeinen Bereinigungsfunktion an. Ein für einen Datenbankfilter sicherer Wert kann in einem Dateinamen, Systembefehl, HTML-Abschnitt, Protokolleintrag, Weiterleitungsziel oder einer URL weiterhin unsicher sein.
## Mit einer Sicherheits-Checkliste abschließen und jeden Punkt belegen
Prüfe bei jeder Änderung, die Datei-E/A oder Benutzereingaben betrifft, die zutreffenden Punkte:
- [ ] Unverarbeitete Eingaben werden vor der Pfaderstellung geprüft.
- [ ] Erstellte Pfade werden kanonisch innerhalb des vorgesehenen Stammverzeichnisses gehalten.
- [ ] Unerwartete Verknüpfungen, Datenkanäle und Dateiarten werden vor dem Lesen abgelehnt.
- [ ] Archiveinträge werden vor dem Entpacken einzeln geprüft.
- [ ] Argumente für Systembefehle werden ohne Einfügung in Zeichenketten übergeben.
- [ ] Dargestellte Werte werden maskiert und aktive Inhalte bereinigt.
- [ ] Externe Zielrechner und Weiterleitungsziele werden eingeschränkt.
- [ ] Benutzerabhängige Protokollwerte werden bereinigt.
- [ ] Datenbankzugriffe verwenden parametrisierte Vorgänge.
- [ ] Jeder Ablehnungszweig verhindert den gefährlichen Vorgang.
- [ ] Gleichwertige Codepfade erhalten dieselbe Korrektur.
- [ ] Gezielte Tests decken akzeptierte Eingaben, abgelehnte Eingaben und Umgehungsversuche ab.
- [ ] Die statische Codeprüfung und die relevanten Tests werden mit Rückgabecode null beendet.
Lege für jede abgeschlossene Prüfung die Nachweise dar und benenne alle Pfade, die nicht überprüft werden konnten.
