![]() |
|
URL dieser Newsmeldung:
30.06.2005
About Security #12: SQL Injection verhindernIn dieser Folge erfahren Sie, wie Sie die in About Security #11 vorgestellten SQL-Injection-Angriffe durch das Prüfen der Benutzereingaben verhindern können. N E U ! Security
aktuell Um das Einschleusen von SQL-Code zu verhindern, müssen alle Eingaben vor ihrer Verwendung in einer SQL-Abfrage geprüft und ggf. bereinigt werden. Und zwar wirklich alle und nicht nur die, die ein Benutzer offiziell ändern kann. Ein Angreifer kann auch z.B. im Formular versteckte Felder oder Cookies manipulieren. Außerdem müssen die Eingaben auf dem Server geprüft werden. Eine Prüfung auf dem Client kann vom Angreifer manipuliert oder umgangen werden. Auch der manchmal genannte Rat, die Länge von Eingabefeldern zu beschränken, schützt nicht vor dem Einschleusen manipulierter Daten. Ein Angreifer kann problemlos eine eigene, manipulierte Webseite verwenden, bei GET-HTTP-Requests die URL manipulieren oder die Daten direkt über Telnet an den Server senden. Daher darf nur den direkt auf dem Server geprüften Daten vertraut werden. Bestimmte Eingaben prüfenDer einfachste Fall sind Parameter, die nur numerische Werte annehmen dürfen. Diese Eingaben können direkt in Werte des entsprechenden Wertebereichs umgewandelt werden. Im Beispiel aus About Security #11 trifft dies auf die Spalte BenutzerNr zu: Alle Eingaben dafür können in ganzzahlige positive Werte umgewandelt werden. Ähnlich ist es bei Eingaben, die nur bestimmte Werte annehmen dürfen. Dies sind z.B. Eingaben für Staaten, Monatsnamen oder Produktgruppen in Webshops. In derartigen Fällen kann die Eingabe mit einer Liste zulässiger Werte verglichen und eine unzulässige Eingabe verworfen werden. Im Beispiel aus About Security #11 trifft dies auf den Wert für den Status zu. Da dort nur die Werte normal und admin zulässig sind, können alle anderen Eingaben verworfen werden. Beliebige Eingaben prüfenSchwieriger ist die Behandlung von Eingaben, die beliebige Werte annehmen können. Dies trifft z.B. auf alle Arten von Namen oder allgemein Suchwörter zu.
Für manche Eingaben, z.B. E-Mail-Adressen oder Telefonnummern, kann
man die Menge zulässiger Zeichen exakt bestimmen und die Eingabe dann
mithilfe regulärer Ausdrücke darauf prüfen. Alle
Eingaben, die unzulässige Zeichen enthalten, werden verworfen. Diese
Methode ist jedoch nur anwendbar, wenn keine potenziell gefährlichen
Zeichen wie z.B. das Quote-Zeichen ( Es gibt Fälle, in denen eine Einschränkung nicht möglich ist oder potenziell gefährliche Zeichen zulässiger Bestandteil der Eingabe sind. In diesen Fällen muss die Menge der möglichen gefährlichen Zeichen festgelegt und diese dann gezielt ausgefiltert oder maskiert werden. Der Nachteil dieser Methode: Ein für Angreifer nützliches Zeichen könnte bei der Festlegung der auszufilternden Zeichen übersehen werden.
Im Beispiel in About Security
#11
gehört das Feld BenutzerName zu diesen Fällen:
Ein
O'Conner wäre wohl kaum begeistert, wenn sein Name zu OConner
verkürzt oder sogar zurückgewiesen würde. Daher muss in
diesem Fall das Zeichen " Einige für Webanwendungen verwendete Programmiersprachen stellen bereits Funktionen zum Maskieren bereit, ansonsten können derartige Funktionen aber auch sehr einfach selbst formuliert werden.
In PHP gibt es die Funktionen addslashes() und
speziell für
MySQL mysql_real_escape_string() zum Maskieren
bestimmter Zeichen
wie " In Perl gibt es die Funktion quote() aus dem DBI-Modul, die die für die jeweils verwendete Datenbank kritischen Zeichen maskiert. Für ASP gibt es keine fertige Lösung, eine entsprechende Funktion kann jedoch mithilfe von replace() implementiert werden. Ein Problem aller Filtermethoden ist, dass die Filter unter Umständen durch andere Darstellungsformen für die zu filternden Zeichen (z.B. UTF, URL-Kodierung) umgangen werden können. Oben erfuhren Sie, wie SQL-Injection durch die Prüfung und Filterung der Eingaben verhindert werden kann. Eine weitere Möglichkeit, das Einschleusen von SQL-Code zu verhindern, ist die Verwendung von Stored Procedures. Diese und weitere Gegenmaßnahmen gegen SQL-Injection-Angriffe werden in der nächsten Folge vorgestellt. Wenn Sie Fragen oder Themenvorschläge haben, können Sie diese gerne an die angegebene E-Mail-Adresse senden oder im Security-Forum einbringen! About Security – Übersicht zum aktuellen Thema "Sichere Webanwendungen"
|
||
|