Alexander (HH): URL auslesen

Beitrag lesen

Und bei einer Abfrage das da (nur ein Beispiel):
<?
$sql = "SELECT 'daten' FROM 'Tabelle' WHERE 'index' = '".$_GET['nr']."'";
?>

Davon mal abgesehen, dass dieses Statement entweder die gesamte Tabelle (?nr=index) oder gar nichts (alle Aufrufvarianten, bei denen der nr-Parameter nicht "index" ist) liefert, ist es wieder einmal ein Lehrbuchbeispiel für SQL injection. Was passiert nach Behebung des o.g. Fehlers bei ?nr=9'%20or%20'x'='x ?

Die DB-Anbindung in PHP ist leider alles andere als optimal, hier muß der Coder entweder explizit die Parameter prüfen oder explizit escapen, am besten beides. Siehe Dokumentation. (Andere DB-Anbindungen, z.B. Perls DBI, nehmen dem Coder das explizite Quoting schon einmal ab -- eine Fehlerquelle weniger, nebenbei ist das bei wiederholter Ausführung auch noch deutlich schneller.)

Alexander