Sicherheit · Fortgeschritten

Injektionen: eine Anweisung von Daten trennen

In einem Satz: Jeder Ort, an dem eine Zeichenkette vom Nutzer in einen Befehl zusammengesetzt wird, ist ein Loch — und die Behebung ist Parameter, nicht Filterung.

Das eine Prinzip

Die Engine sollte den Befehl und die Daten getrennt erhalten. Parametrisierte Abfragen, Systembefehle mit einem Argument-Array und Vorlagen-Engines, die unsicheren Inhalt markieren. Zeichenketten zu filtern ist ein Rennen, das man stets verliert.

Wo es auftaucht

Datenbanken, Betriebssystembefehle, Bibliotheksabfragen, Aufrufe an eine Suchmaschine und auch in dynamisch gebauten Adressen. Und ja — auch in Prompts an ein Sprachmodell, wo externer Inhalt als Anweisung ausgelegt werden kann.

Verteidigung in der Tiefe

Minimale Berechtigungen für den Datenbanknutzer, damit der Schaden begrenzt ist, selbst wenn etwas durchkam. Und Eingabevalidierung gegen ein Schema — nicht als Ersatz für die Trennung, sondern als zusätzliche Schicht, die absurde Eingabe von vornherein blockiert.

Im Detail

Führen Sie automatische Tests aus, die jedem Feld ungewöhnliche Eingabe zuführen — Sonderzeichen, extreme Länge, verschiedene Kodierungen — und prüfen, dass die Antwort ein geordneter Fehler und kein anomales Verhalten ist. Das fängt auch gewöhnliche Fehler, nicht nur Schwachstellen.