Hallo allerseits,
ich habe den Verdacht, dass auf meiner Website jemand eingebrochen sein koennte, und zwar ueber ein oeffentliches Formular.
Habe gerade alles gesichert, bin aber jetzt panisch am checken, wie das gegangen sein koennte, bzw. ob es wirklich so ist.
Darum eroeffne ich jetzt einfach mal diesen Thread, und waere Euch sehr dankbar, wenn ihr mir hin und wieder auftauchende Fragen beantworten koenntet?
Frage Nr. 1: haltet ihr diesen SQL-Ausdruck (in PHP) fuer problematisch?
==============
$newAuthorSQL = 'INSERT INTO dyn_authors';
$newAuthorSQL .= ' (eMail,';
$newAuthorSQL .= ' userName,';
$newAuthorSQL .= ' password)';
$newAuthorSQL .= ' VALUES (';
$newAuthorSQL .= " '".addslashes($eMail)."',";
$newAuthorSQL .= " '".addslashes($userName)."',";
$newAuthorSQL .= " '$password')";
$newID = $dataBase->insert($newAuthorSQL);
Der Befehl ist ausgefuehrt worden, es erfolgte ein Eintrag in der Datenbank, allerdings mit leeren Feldern (eMail, userName, password).
Der Rueckgabewert $newID (id des Eintrags) war korrekt.
Eigentlich werden alle drei Parameter auf Gueltigkeit (leerer String, gueltige Zeichen, ...) geprueft, keine Ahnung, wo da das Loch ist.
Moeglicherweise, dass ich beim Passwort kein addslashes() benutzt habe? Aber kann es denn sein, dass jemand ein Passwort mit Datenbank-Befehl eingeschmuggelt hat, der Eintrag in die DB aber trotzdem korrekt funktioniert?
Auf die Parameter greife ich bei Formularuebergabe z.B. per
$HTTP_POST_VARS['userName']
zu. Die Laenge der Parameter wird allerdings im Skript nicht nochmal explizit geprueft, nur das (Original-)Formularfeld hat eine feste Länge.
Und abschliessend: was kann denn ein Eindringling, der Zugriff auf die DB hat normalerweise tun? Zugangsdaten ausschnueffeln? Hat er Zugriff auf meinen Code? Kann er Dateien loeschen? Schlimmeres?
Ich hoffe, ihr versteht, dass ich die betroffene Domain hier nicht nennen will, man muss ja Sicherheitsloecher nicht unbedingt propagieren.
Danke fuer Eure Hilfe,
Ralph