Post aus der Vergangenheit: Security-Fix nach 8 Jahren

Der Entwickler der Web-Applikation PHP Gift Registry hat fast 8 Jahre nach der Veröffentlichung eines Hinweises auf eine schwere Sicherheitslücke schließlich doch noch geantwortet: Das Problem sei nun behoben.

In Pocket speichern vorlesen Druckansicht 49 Kommentare lesen
Lesezeit: 1 Min.

Das Advisory von Januar 2005 war eines von hunderten, ähnlich gearteten dieser Zeit: Eine PHP-Applikation überprüft die Parameter einer Datenbankabfrage nicht und als Resultat kann ein Angreifer mit speziellen URLs beliebige Datenbankbefehle einschleusen. Das besondere an diesem Bug-Report zu PHP Gift Registry: Nach über 7 Jahren hat sich der Autor der Software die Mühe gemacht, dann doch noch zu antworten.

"Alle SQL-Anfragen wurden in Version 2.0.0 durch parametrisierte Statements ersetzt" heißt es kurz angebunden und ohne weiteren Kommentar in einem Posting vom Montag, den 3. Dezember 2012, das anscheinend vom Autor der Software stammt.

Derartige SQL-Injection-Lücken sind immer noch weit verbreitet und das größte Sicherheitsproblem im Zusammenhang mit Web-Anwendungen. Sogenannte Prepared Statements sind die einfachste und effizienteste Schutzmaßnahme dagegen. Dabei bereitet der Entwickler eine Datenbankabfrage vor und deklariert dabei die später einzusetzende Variable wie den Benutzenamen:

$stmt = $dbh->prepare("SELECT user FROM users WHERE (user=:user)");
$stmt->bindParam(':user', $user);

Zur Laufzeit des Programms muss er dann nur noch den Benutzernamen festlegen und kann dann die vorbereitete Datenbankabfrage abschicken:

$user = 'ju';
$stmt->execute();

Der Vorteil: Selbst wenn auf irgendwelchen verschlungenen Pfaden etwas wie ju';DROP TABLE users; -- in der Variable $user landen sollte, wird das immer nur als seltsames Suchkriterium verwendet, aber nie zu ungewollten Datenbankbefehlen wie dem zum Löschen einer Tabelle führen. (ju)