|
SQL Injection - gehackte Datenbanken
Wie schütze ich mich gegen Datenbank Hacker und was sind
Injections eigentlich genau ? Gerade Anfänger möchte ich
für das Thema sensibilisieren, denn gewöhnt man sich erstmal
einen Programmierstil an, bleibt man auch lange bei diesem. Eine
SQL Injection macht man, indem man eine Webseite besucht und sich
Sachen sucht die vermutlich mit der Datenbank zu tun haben. Man nehme
zum Beispiel Gästebücher, Loginaufforderungen oder ähnliches.
Hier verbergen sich die Gefahren.
Wie genau funktioniert Injection ?
Man ändert den SQL Befehl künstlich ab, so dass ein neuer
Befehl entsteht und euer Skript führt diesen in der Datenbank
aus, was verheerende Folgen haben kann. Jetzt fragt Ihr euch wie jemand
eure SQL Befehle manipulieren kann, obwohl dieser keinen Zugriff auf
eure Skripte hat.
Ein Beispiel:
Seite xy hat ein Loginformular, wo man den Usernamen und das Passwort
eingibt. Im Formular werden per POST "username" und "passwort" übertragen,
was der User eingibt. Nachdem der User seine Daten eingegeben hat, versucht
euer Skript warscheinlich in der Datenbank nachzusehen, ob es diesen User
gibt.
Gibt der User jetzt als Namen 12 ein und als Passwort 34,
dann wird die SQL Abfrage so an MySQL geschickt:
SELECT * FROM kunden WHERE username="12" AND passwort="34";
Jetzt! gibt der User aber zum Beispiel als usernamen 12 ein und
als Passwort gibt er 34" OR 1=1; - was passiert jetzt ? Er manipuliert die
SQL Abfrage und kann so eigenen Code einschleusen - sich als Admin einloggen oder
sonstige Dummheiten machen.
SELECT * FROM kunden WHERE username="12" AND passwort="34" OR 1=1;
Plötzlich liefert SQL Ergebnisse für den Login, ohne dass dies gewollt wäre.
Wie schütze ich mich gegen SQL Injections
Ein ganz einfaches Mittel, welches wir am Anfang des Kurses schon kennengelernt haben.
Wir "escapen" einfach die Eingabe. Das ist wie mit echo("Hallo Welt"); -
wenn wir da das Wort Welt in Anführungszeichen erscheinen lassen wollen, müssen wir
die Anführungszeichen um das Welt escapen - mit \ ! Hierfür gibt es auch einen Befehl:
mysql_real_escape_string($text); escaped alle Zeichen in $text die so nicht
stehenbleiben dürften.
<?php $sql = 'SELECT * FROM kunden WHERE username="'.mysql_real_escape_string($_POST['user']).'" AND passwort="'.mysql_real_escape_string($_POST['pass']).'";'; ?>
|
Neben dem mysql_real_escape_string($text); gibt es auch
addslashes($text); zum escapen von Strings. Der mysql_real_escape_string($text);ist dem addslashes($text); allerdings vorzuziehen, da es dann
keine unliebsamen Überraschungen gibt, wenn die Verbindung zur Datenbank mal
ein anderes Charset hat.
Alternativ kann man die Injections nicht nur zum löschen einsetzen. Man kann
sich auch mit anderen Usern einloggen und vieles anderes.
Dies ist nur eines von vielen Beispielen wie man versuchen kann Schaden anzurichten.
Die Möglichkeiten sind weitreichend, wenn man erstmal so eine Schwachstelle
entdeckt hat und ein addslashes(); kostet wirklich nicht viel
Zeit und sollte der minimalste Schutz sein den man investiert.
Danke an Graf Zahl für die Tips !
Interessanter Artikel: SQL Injection Artikel auf MyWebSolution.de
|