Eines der beliebtesten Mittel eines Angriffes auf eine Webpräsenz ist neben DDoS die mySQL-Injection. Dabei werden “unsichere” SQL Statements ausgenutzt um die Datenbank zu kompromittieren, oder um sich in eine Seite einzuloggen. Der Trick dahinter ist eigentlich nichts anderes, als das man über die richtigen Eingaben – und nein, ich schreibe diese nicht hier hin – in den Loginfeldern das SQL-Statement so weit verändert, dass es immer TRUE, also WAHR zurück gibt.
Dies funktioniert natürlich nur, wenn man keine Vorkehrungen dagegen getroffen hat. Die Funktion mysql_real_escape_string(); ist schon mal ein recht guter Ansatz, denn dadurch werden alle ” und ‘ im Statement maskiert und können so schon mal nicht mehr als Teil des eigentlichen Statements gelten.
Um nun wirklich auf Nummer sicher zu gehen empfiehlt sich zusätzlich der Einsatz von sprintf(); Ich werde hier mal ein kleines Beispiel ohne größere Kommentare hinterlassen.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | <?php /** * Magic Quotes aushebeln, die stören nur * und sind eh bald hinfällig :-) */ if(get_magic_quotes_gpc()) { $wert_1 = stripslashes($wert_1); $wert_2 = stripslashes($wert_2); $wert_3 = stripslashes($wert_3); } /** * mySQL-Query zusammenbasteln */ $query = sprintf(" INSERT INTO tabelle SET key_1 = '%s', key_2 = '%s', key_3 = '%s', ", mysql_real_escape_string($wert_1), mysql_real_escape_string($wert_2), mysql_real_escape_string($wert_3) ); /** * Query an die Datenbank übermitteln */ $result = $sql->query($query); ?> |




Besser als diese Lösung ist das verwenden der mysqli Klasse welche alle Sicherheitschecks direkt eingebaut und dezidiert für den entsprechend erwarteten Wert auswerten kann.