![]() |
|
URL dieser Newsmeldung:
07.07.2005
About Security #13: Mit Stored Procedures gegen SQL InjectionDie Verwendung von Prepared SQL Statements bzw. Stored Procedures ist neben der in About Security #12 beschriebenen Prüfung der Benutzereingaben eine weitere Möglichkeit, um SQL-Injection-Angriffe zu verhindern. N E U ! Security
aktuell Bei der Verwendung von Stored Procedures werden Templates der verwendeten SQL-Abfragen definiert und in der Datenbank gespeichert. Während der Programmausführung werden diese Templates um die übergebenen Parameter erweitert und ausgeführt. Prepared SQL Statements funktionieren ähnlich, die Templates werden jedoch während der Programmausführung an die Datenbank gesendet und von dieser dann gespeichert, ebenfalls um die Parameter erweitert und ausgeführt. Das Hinzufügen weiterer SQL-Befehle über die Parameter ist bei parametrisierten Abfragen nicht möglich. Ein wichtiger Hinweis: Stored Procedures sind nicht von sich aus vor SQL Injection sicher. Werden sie auf herkömmliche Weise mit den Benutzereingaben aufgerufen, kann SQL-Code eingeschleust werden. Erst durch den parametrisierten Aufruf sind sie nach aktuellem Wissenstand vor SQL-Injection sicher. Während Stored Procedures von der verwendeten Datenbank unterstützt werden müssen, können Prepared Statements auch vom Datenbank-Interface implementiert werden. Diese Prepared Statements auf der Clientseite bieten die gleiche Sicherheit wie ihre serverseitige Variante, profitieren aber nicht wie diese von etwaigen Optimierungen durch das Datenbanksystem. Im Folgenden wird der Einsatz von Prepared Statements beschrieben. Ähnlich funktioniert die Verwendung von Stored Procedures. Prepared StatementsAls Beispiel soll die Abfrage
aus About Security #11 dienen. Wie dort gezeigt wurde, kann ein Angreifer diese Abfrage für einige Angriffe ausnutzen. Dies ist bei parametrisierten Aufrufen nicht möglich. Dabei werden die Eingaben gefiltert und der Typ entsprechend der gespeicherten Abfrage angepasst. Allgemein lautet die obige Abfrage als Prepared Statement
Für PHP gibt es je nach verwendeter Datenbank verschiedene Funktionen zum Erstellen vom Prepared Statements. Für PostgreSQL kann man die Abfrage als Prepared Statement als
formulieren. Der Aufruf erfolgt dann über folgenden Funktionsaufruf:
Für MySQL sind entsprechende Funktionen in der experimentellen MySQL-Erweiterung MySQLi vorhanden. Perls datenbankunabhängiges Datenbankmodul DBI stellt folgende Funktionen zur Verfügung:
In Microsofts .NET-Framework könnte die parametrisierte Abfrage folgendermaßen formuliert werden:
Für Java gibt es die Klasse
Weitere MaßnahmenUm SQL Injection zu verhindern oder zumindest ihre Auswirkungen zu mindern, sind eine Reihe weiterer Maßnahmen hilfreich:
Database-Intrusion-Protection-Systeme können Angriffe feststellen und abwehren. Sie werden in einer späteren Folge behandelt. In der nächsten Folge geht es um einen weiteren Angriff auf Webanwendungen: Cross-Site Scripting. 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"
About Security (#1): IT-Sicherheit -- Was ist das eigentlich? (http://www.entwickler.com/itr/news/psecom,id,21135,nodeid,82.html) About Security (#2): Angriffsszenarien (http://www.entwickler.com/itr/news/psecom,id,21262,nodeid,82.html) About Security (#3): Eindringlinge abwehren (http://entwickler.com/itr/news/psecom,id,21388,nodeid,82.html) About Security (#4): Gefährdung aus der Peripherie (http://www.entwickler.com/itr/news/psecom,id,21551,nodeid,82.html) About Security (#5): Der Pufferüberlauf (http://www.entwickler.com/itr/news/psecom,id,21633,nodeid,82.html) About Security (#6): Ausnutzung von Pufferüberlauf-Schwachstellen (http://www.entwickler.com/itr/news/psecom,id,21754,nodeid,82.html) About Security (#7): Gegenwehr -- Pufferüberläufe verhindern (http://www.entwickler.com/itr/news/psecom,id,21897,nodeid,82.html) About Security (#8): Vorbeugung -- Pufferüberläufe verhindern (http://www.entwickler.com/itr/news/psecom,id,22002,nodeid,82.html) About Security (#9): Sourcecode Audit -- Pufferüberläufe finden (http://www.entwickler.com/itr/news/psecom,id,22161,nodeid,82.html) About Security (#10): Software-Audit -- Schwachstellensuche in Binaries (http://www.entwickler.com/itr/news/psecom,id,22272,nodeid,82.html) About Security (#11): SQL-Injection (http://www.entwickler.com/itr/news/psecom,id,22419,nodeid,82.html) About Security (#12): SQL-Injection verhindern (http://entwickler.com/itr/news/psecom,id,22580,nodeid,82.html) |
||
|