www.wikidata.de-de.nina.az
SQL Injection dt SQL Einschleusung ist das Ausnutzen einer Sicherheitslucke in Zusammenhang mit SQL Datenbanken Die Sicherheitslucke entsteht durch einen Programmierfehler in einem Programm das auf die Datenbank zugreift Durch diesen Programmierfehler kann ein Angreifer Datenbankbefehle einschleusen und abhangig vom Einzelfall weitere Daten aus der Datenbank auslesen Daten unberechtigt andern oder loschen oder sogar die Kontrolle uber den kompletten Datenbankserver ubernehmen Inhaltsverzeichnis 1 Voraussetzungen 2 Beispiel 3 Vorgang 3 1 Veranderung von Daten 3 2 Datenbank Server verandern 3 3 Ausspahen von Daten 3 4 Einschleusen von beliebigem Code 3 5 Zeitbasierte Angriffe 3 6 Erlangen von Administratorrechten 3 7 Verwundbarkeiten innerhalb des Datenbankservers 3 8 Blinde SQL Injection 4 Gegenmassnahmen 4 1 Grundidee von Prepared Statements 4 2 Python 4 3 Visual Basic ADOdb 4 4 Delphi 4 5 Microsoft NET Framework C ADO NET 4 6 Java JDBC 4 7 PHP 4 8 Perl 4 9 ColdFusion Markup Language 4 10 MS SQL 5 Siehe auch 6 Weblinks 7 Einzelnachweise und RessourcenVoraussetzungen BearbeitenEin erfolgreiches Ausnutzen einer SQL Injection erfordert eine SQL Datenbank die angegriffen wird zum Beispiel MySQL Microsoft SQL Server Db2 ein Anwendungsprogramm in das Angreifer Daten eingeben konnen zum Beispiel eine Loginmaske eine Produktsuche in einem Onlineshop oder ein Kontaktformular im Web dass das Anwendungsprogramm diese Daten an die Datenbank weiterreicht einen Programmierfehler in dem Anwendungsprogramm beim Weiterreichen der DatenDer Programmierfehler besteht darin dass das Anwendungsprogramm die Eingabedaten nicht als reine Daten an die Datenbank weiterreicht sondern aus diesen Daten die Datenbankabfrage erzeugt Dadurch kann ein Angreifer versuchen Teile der Datenbankabfrage gezielt zu steuern In der Datenbankabfragesprache SQL haben einige Zeichen eine besondere Bedeutung insbesondere der Apostroph um Textdaten zu umschliessen das Anfuhrungszeichen um Textdaten zu umschliessen nur einige Datenbanken der umgekehrte Schragstrich Backslash um das nachfolgende Zeichen nicht als besonderes Zeichen zu interpretieren das Semikolon um einen Datenbankbefehl von dem nachsten Datenbankbefehl zu trennen ein doppelter Bindestrich um den Rest der Zeile zu ignorieren Kommentar Dokumentenorientierte NoSQL Datenbanken konnen ebenfalls von diesem Sicherheitsproblem betroffen sein die geschweiften und eckigen Klammern welche ein JSON Objekt bzw Array umschliessenDiese Zeichen verwendet ein Angreifer gezielt um den Angriff durchzufuhren Beispiel BearbeitenEin Beispiel fur eine SQL Abfrage die in einem Redaktionssystem nach Artikeln aus einer bestimmten Kategorie sucht ist SELECT id titel artikeltext FROM artikel WHERE kategorie gesuchte Kategorie Diese Abfrage hat folgende Bestandteile Die grossgeschriebenen Worter sind Schlusselworter in SQL und haben eine feste Bedeutung Die kleingeschriebenen Worter sind die Namen von Tabellen Zeilen oder Spalten in der Datenbank Text innerhalb von einfachen Anfuhrungszeichen ist feststehender Text Der Text gesuchte Kategorie stellt hier nur einen Platzhalter dar an dieser Stelle der Datenbankabfrage muss die jeweils gesuchte Kategorie eingetragen werden Solange die gesuchte Kategorie keins der oben erwahnten Sonderzeichen enthalt konnte sie direkt in die Beispielabfrage eingesetzt werden Wenn die gewunschte Kategorie jedoch zum Beispiel Rock n Roll ist und damit einen Apostroph enthalt fuhrt ein naives Ersetzen des Platzhalters zu dieser SQL Abfrage SELECT id titel artikeltext FROM artikel WHERE kategorie Rock n Roll Auffallig ist hier die Doppelbedeutung des Apostroph einerseits als Begrenzer andererseits als wortlich gemeintes Zeichen Diese Doppelbedeutung ist fur Menschen ersichtlich aus Sicht der Datenbank ist diese Anfrage jedoch nicht sinnvoll interpretierbar da die Abfrage als kategorie Rock interpretiert wird gefolgt von einem Wort n und dem weiteren Text Roll in Apostrophen Mit dem Wort n kann die Datenbank nichts anfangen und wird fur diese Abfrage daher eine Fehlermeldung zuruckgeben Eine SQL Injection besteht nun darin dass der Angreifer durch gezielte Wahl der Eingabedaten die Datenbankabfrage so verandert dass sie zwar noch eine gultige Struktur hat aber eine andere Bedeutung So fuhrt zum Beispiel der scheinbar unsinnige Suchbegriff asdfasdf OR id lt 100 OR kategorie sdfgsdfg zu dieser Datenbankabfrage SELECT id titel artikeltext FROM artikel WHERE kategorie asdfasdf OR id lt 100 OR kategorie sdfgsdfg Diese Abfrage ist aus Sicht der Datenbank vollig korrekt sie enthalt 3 einzelne Bedingungen von denen mindestens eine wahr sein muss Die erste und dritte Bedingung haben in diesem Beispiel nur die Aufgabe dass die SQL Abfrage weiterhin wohlgeformt ist und es ist unwahrscheinlich dass es in der Datenbank tatsachlich Kategorien diesen Namens gibt Daher bleibt als einzig relevante Bedingung id lt 100 ubrig Aus der ursprunglichen SQL Abfrage die nur Artikel aus einer bestimmten Kategorie liefert ist durch geschickte Wahl des Suchbegriffs eine strukturell andere SQL Abfrage geworden die nun die Artikel anhand ihrer ID sucht unabhangig von der Kategorie Durch diese geanderte SQL Abfrage kann ein Angreifer moglicherweise Daten aus der Datenbank sehen die nicht fur ihn bestimmt sind Durch andere gezielte Suchbegriffe kann der Angreifer moglicherweise Daten in der Datenbank andern oder loschen je nach Einzelfall Der Programmierfehler besteht bei einer SQL Injection darin den Suchbegriff 1 1 in die Datenbankabfrage zu ubernehmen ohne die besondere Bedeutung des Apostroph und ahnlicher Zeichen zu berucksichtigen Vorgang BearbeitenVeranderung von Daten Bearbeiten Auf einem Webserver befindet sich das Script find cgi zum Anzeigen von Artikeln Das Script akzeptiert den Parameter ID welcher spater Bestandteil der SQL Abfrage wird Folgende Tabelle soll dies illustrieren Erwarteter AufrufAufruf http webserver cgi bin find cgi ID i style background color lightgreen 42 i Erzeugtes SQL SELECT author subject text FROM artikel WHERE ID i style background color lightgreen 42 i SQL InjectionAufruf http webserver cgi bin find cgi ID i style background color pink 42 UPDATE USER SET TYPE admin WHERE ID 23 i Erzeugtes SQL SELECT author subject text FROM artikel WHERE ID i style background color pink 42 UPDATE USER SET TYPE admin WHERE ID 23 i Dem Programm wird also ein zweiter SQL Befehl untergeschoben der die Benutzertabelle modifiziert Datenbank Server verandern Bearbeiten Auf einem Webserver findet sich das Script search aspx zum Suchen nach Webseiten Das Script akzeptiert den Parameter keyword dessen Wert spater Bestandteil der SQL Abfrage wird Folgende Tabelle soll dies illustrieren Erwarteter AufrufAufruf http webserver search aspx keyword i style background color lightgreen sql i Erzeugtes SQL SELECT url title FROM myindex WHERE keyword LIKE i style background color lightgreen sql i SQL InjectionAufruf http webserver search aspx keyword i style background color pink sql GO EXEC cmdshell shutdown s i Erzeugtes SQL SELECT url title FROM myindex WHERE keyword LIKE i style background color pink sql GO EXEC cmdshell shutdown s i Hier wird der eigentlichen Abfrage ein weiterer Befehl angehangt Die zwei Bindestriche kommentieren das Hochkomma als Uberbleibsel der eigentlichen Anfrage aus womit es ignoriert wird Die nun generierte Abfrage ermoglicht das Ausfuhren eines Windows Prozesses hier illustriert durch das erzwungene Herunterfahren des Servers sofern der Prozess Administratorrechte hat Aber auch Daten oder Ahnliches lassen sich dadurch erzeugen am Beispiel Microsoft SQL Server Ausspahen von Daten Bearbeiten Auf manchen SQL Implementationen ist die UNION Klausel verfugbar Diese erlaubt es mehrere SELECTs gleichzeitig abzusetzen die dann eine gemeinsame Ergebnismenge zuruckliefern Durch eine geschickt untergeschobene UNION Klausel konnen beliebige Tabellen und Systemvariablen ausgespaht werden Erwarteter AufrufAufruf http webserver cgi bin find cgi ID i style background color lightgreen 42 i Erzeugtes SQL SELECT author subject text FROM artikel WHERE ID i style background color lightgreen 42 i SQL InjectionAufruf http webserver cgi bin find cgi ID i style background color pink 42 UNION SELECT login password x FROM user i Erzeugtes SQL SELECT author subject text FROM artikel WHERE ID i style background color pink 42 UNION SELECT login password x FROM user i Das x beim UNION SELECT ist notig weil alle mit UNION verknupften SELECTs die gleiche Anzahl von Spalten haben mussen Der Angreifer kann die Anzahl der Spalten herausfinden indem er ID 42 order by x anhangt Wenn die Seite beispielsweise bei x 8 normal ladt aber bei x 9 eine Fehlermeldung oder andere Seite zeigt dann ist die Spaltenanzahl 8 Ist der Datenbankserver fehlerhaft konfiguriert und hat beispielsweise ein aktuell mit der Datenbank verbundener Benutzer uber den die SQL Injection abgesetzt werden soll Zugriff auf Systemdatenbanken so kann der Angreifer uber eine einfache SQL Syntax wie Systemdatenbank SystemtabelleMitTabellenAuflistung auf die Systemtabellen zugreifen und samtliche Tabellen einer bestimmten Datenbank auslesen Dadurch kann er wichtige Informationen erhalten um weitere Angriffe durchzufuhren und tiefer in das System einzudringen Bei MySQL Datenbanksystemen werden diese Systeminformationen in der Datenbank information schema 1 verwaltet Das nachfolgende Beispiel zeigt wie bei einer Abfrage mit 3 Ergebnisspalten die Struktur samtlicher zugreifbarer Datenbanken in Erfahrung gebracht werden kann Erwarteter AufrufAufruf http webserver cgi bin find cgi ID i style background color lightgreen 42 i Erzeugtes SQL SELECT author subject text FROM artikel WHERE ID i style background color lightgreen 42 i SQL InjectionAufruf http webserver cgi bin find cgi ID i style background color pink 42 UNION SELECT Datenbank Tabelle Spalte br UNION SELECT table schema table name column name FROM information schema columns br WHERE NOT table schema information schema 20 i Erzeugtes SQL SELECT author subject text FROM artikel WHERE ID i style background color pink 42 UNION SELECT Datenbank Tabelle Spalte br UNION SELECT table schema table name column name FROM information schema columns br WHERE NOT table schema information schema i Einige Datenbanksysteme bieten weiterhin die Moglichkeit Dateien uber eine Anfrage zuruckzugeben Hieruber konnen in Kombination mit oben genannten Techniken und soweit der Pfad bekannt ist beliebige Dateien auf die der Datenbankprozess Zugriff hat ausgelesen werden Ein ahnlicher Aufruf in einer MongoDB NoSQL Datenbank konnte so aussehen Erwarteter AufrufAufruf http webserver cgi bin find cgi ID i style background color lightgreen 42 i Erzeugtes NoSQL db users find userID i style background color lightgreen 42 i NoSQL InjectionAufruf http webserver cgi bin find cgi i style background color pink ID ne i Erzeugtes NoSQL db users find userID i style background color pink ne undefined i ne ist der Operator fur ungleich die Abfrage gibt die Benutzer zuruck deren Benutzername nicht leer ist d h alle Benutzer Einschleusen von beliebigem Code Bearbeiten Eine weniger bekannte Variante stellt gleichzeitig die potenziell gefahrlichste dar Wenn der Datenbankserver die Kommandos SELECT INTO OUTFILE beziehungsweise SELECT INTO DUMPFILE unterstutzt konnen diese Kommandos dazu benutzt werden Dateien auf dem Dateisystem des Datenbankserver abzulegen Theoretisch ist es dadurch moglich falls das Bibliotheksverzeichnis des Betriebssystems oder des Datenbankservers fur denselben beschreibbar ist wenn dieser zum Beispiel als root lauft einen beliebigen Code auf dem System auszufuhren Zeitbasierte Angriffe Bearbeiten Wenn der Datenbankserver Benchmark Funktionen unterstutzt kann der Angreifer diese dazu nutzen um Informationen uber die Datenbankstruktur in Erfahrung zu bringen In Verbindung mit dem if Konstrukt sind der Kreativitat des Angreifers kaum Grenzen gesetzt Das Kopieren von Datenbankinhalten dauert allerdings wesentlich langer Das folgende Beispiel benotigt auf einem MySQL Datenbankserver mehrere Sekunden falls der gegenwartige User root ist SELECT IF USER LIKE root BENCHMARK 100000 SHA1 test false Verwandt dazu sind Boolesche Angriffe die durch Boolesche Abfragen versuchen Datenbankinhalte zu extrahieren Erlangen von Administratorrechten Bearbeiten Bei bestimmten Datenbankservern wie dem Microsoft SQL Server bis zur Version 2000 wurden Stored Procedures wie Xp cmdshell automatisch angeboten die unter anderem dazu missbraucht werden konnen Kommandos mit den Rechten des SQL Serverprogramms auszufuhren Neuere Versionen des Microsoft SQL Server haben diese Funktion standardmassig deaktiviert Diese Moglichkeit konnte dazu benutzt werden um zum Beispiel eine Shell auf dem angegriffenen Rechner zu starten Verwundbarkeiten innerhalb des Datenbankservers Bearbeiten Manchmal existieren Verwundbarkeiten auch innerhalb der Datenbanksoftware selbst So erlaubte zum Beispiel die PHP Funktion mysql real escape string im MySQL Server einem Angreifer SQL Injection basierende Angriffe basierend auf Unicode Zeichen selbst dann auszufuhren wenn die Benutzereingaben korrekt maskiert wurden Dieser Fehler wurde in der Version 5 0 22 am 24 Mai 2006 behoben Blinde SQL Injection Bearbeiten Von einer blinden SQL Injection wird gesprochen wenn ein Server keine deskriptive Fehlermeldung zuruckliefert aus der hervorgeht ob der ubergebene Query erfolgreich ausgefuhrt wurde oder nicht Anhand verschiedenster Kleinigkeiten wie etwa leicht unterschiedlicher Fehlermeldungen oder charakteristisch unterschiedlicher Antwortzeiten des Servers kann ein versierter Angreifer haufig dennoch feststellen ob ein Query erfolgreich war oder einen Fehler zuruckmeldet Gegenmassnahmen BearbeitenUm SQL Injections zu verhindern durfen vom Benutzer eingegebene Daten nicht ohne Weiteres in eine SQL Anweisung eingebaut werden Eingabedaten konnen auf die Eigenschaften erwarteter Werte gepruft werden So bestehen deutsche Postleitzahlen beispielsweise nur aus Ziffern Grundidee von Prepared Statements Bearbeiten Der sicherste Weg ist jedoch die Daten uberhaupt vom SQL Interpreter fernzuhalten 2 Dabei kann man auf das Kappen der Eingabe verzichten Die Technik dazu sind gebundene Parameter in Prepared Statements Dabei werden die Daten als Parameter an einen bereits kompilierten Befehl ubergeben Die Daten werden somit nicht interpretiert und eine SQL Injection verhindert Stored Procedures bieten dagegen keinen generellen Schutz vor SQL Injection insbesondere dann nicht wenn der SQL Code der Funktion nicht bekannt ist Doch auch auf Seiten des Datenbankservers lassen sich Sicherheitsvorkehrungen treffen So sollten die Benutzer mit denen sich eine Webanwendung beim Datenbankserver authentifiziert nur die Privilegien besitzen die er tatsachlich benotigt So konnen zumindest einige der moglichen Angriffe unwirksam werden Hat ein Betreiber eines Webservers keine Kontrolle uber die Anwendungen kann durch Einsatz von Web Application Firewalls WAF zumindest teilweise verhindert werden dass SQL Injection Schwachstellen ausgenutzt werden konnen Unabhangig von der Kontrolle uber die Anwendungen kann ein Betreiber eines Webservers durch den gezielten Einsatz einer WAF die Sicherheit zusatzlich erhohen da viele WAFs neben abwehrenden auch prophylaktische Massnahmen anbieten Es ist nicht schwer bestehende Programme so umzubauen dass SQL Injections nicht mehr moglich sind Das hauptsachliche Problem der meisten Programmierer ist fehlendes Wissen uber diese Art von Angriffen Nachfolgend einige Beispiele um die Angriffe abzuwehren Die naive aber falsche Idee eine SQL Abfrage mit beliebigen Eingabedaten anzureichern sieht in den meisten Programmiersprachen so aus gefahrlicher Code enthalt die Sicherheitslucke SQL Injection sql SELECT spalte1 FROM tabelle WHERE spalte2 eingabedaten query db query sql Die doppelten Anfuhrungszeichen gehoren hier zur Programmiersprache die einfachen Anfuhrungszeichen gehoren zu SQL Wenn die Eingabedaten selbst auch einfache Anfuhrungszeichen enthalten konnen ist eine SQL Injection moglich Um das zu verhindern ist die Idee die SQL Anfrage und die Daten zu trennen Das eingabedaten im folgenden Code ist ein Platzhalter fur die eigentlichen Eingabedaten Diese werden in einem zweiten Schritt bei der Abfrage mittels db query an die Datenbank ubergeben Die Trennung von SQL und Eingabedaten verhindert eine SQL Injection sql SELECT spalte1 FROM tabelle WHERE spalte2 eingabedaten query db query sql eingabedaten eingabedaten Python Bearbeiten In Python gibt es mehrere Moglichkeiten mit einer Datenbank zu kommunizieren Eine davon ist SQLAlchemy Um hierbei SQL Injection zu entgehen sollte man rohe SQL Befehle vermeiden sofern dieser durch Form oder URL Anfragen manipuliert werden konnten Nachfolgend ist ein solches Beispiel zu sehen db engine execute SELECT FROM table Stattdessen wird dazu geraten die internen Funktionen und Methoden von SQLAlchemy zu nutzen wie z B die Folgenden 3 session query Order get order id session query Order filter Order status active Visual Basic ADOdb Bearbeiten In Visual Basic gibt es einfache Command Objekte mit denen diese Probleme vermieden werden konnen Anstatt cn Execute SELECT spalte1 FROM tabelle WHERE spalte2 amp spalte2Wert amp sollte Folgendes verwendet werden Dim cmd As ADODB Command rs as ADODB Recordset With cmd Set ActiveConnection cn Set CommandType adCmdText CommandText SELECT spalte1 FROM tabelle WHERE spalte2 Parameters Append CreateParameter paramSp2 adVarChar adParamInput 25 spalte2Wert 25 ist die max lange Set rs Execute End With Delphi Bearbeiten Seit der BDE kennen die Querys Parameter Die Syntax ist bei verschiedenen Komponentensammlungen nicht immer identisch aber ahnlich Anstatt function TDatabase GetData ParameterID Integer Integer var Qry TQuery begin Result 0 Qry TQuery Create try Qry SQL Text SELECT F DATA FROM T BLUBB WHERE ID IntToStr ParameterID Qry Open Result Qry FieldByName F DATA AsInteger finally Qry Free end end sollte definitiv mit Parametern gearbeitet werden function TDatabase GetData ParameterID Integer Integer var Qry TQuery begin Result 0 Qry TQuery Create try Qry SQL Text SELECT F DATA FROM T BLUBB WHERE ID PI Qry ParamByName PI AsInteger ParameterID Qry Open Result Qry FieldByName F DATA AsInteger finally Qry Free end end Microsoft NET Framework C ADO NET Bearbeiten Im Net Framework gibt es einfache Objekte mit denen solche Probleme umgangen werden konnen Anstatt SqlCommand cmd new SqlCommand SELECT spalte1 FROM tabelle WHERE spalte2 spalte2Wert sollte Folgendes verwendet werden string spalte2Wert Mein Wert SqlCommand cmd new SqlCommand SELECT spalte1 FROM tabelle WHERE spalte2 spalte2Wert cmd Parameters AddWithValue spalte2Wert spalte2Wert Java JDBC Bearbeiten Eine SQL Injection kann leicht durch eine bereits vorhandene Funktion verhindert werden In Java wird zu diesem Zweck die PreparedStatement Klasse verwendet JDBC Technologie und die Daten unsicherer Herkunft werden als getrennte Parameter ubergeben Um die Daten von der SQL Anweisung zu trennen wird der Platzhalter verwendet Anstatt Statement stmt con createStatement ResultSet rset stmt executeQuery SELECT spalte1 FROM tabelle WHERE spalte2 spalte2Wert sollte Folgendes verwendet werden PreparedStatement pstmt con prepareStatement SELECT spalte1 FROM tabelle WHERE spalte2 pstmt setString 1 spalte2Wert ResultSet rset pstmt executeQuery Der Mehraufwand an Schreibarbeit durch die Verwendung der PreparedStatement Klasse kann sich ausserdem durch einen Performancegewinn auszahlen wenn das Programm das PreparedStatement Objekt mehrfach verwendet PHP Bearbeiten In PHP steht fur Datenbankzugriffe die Bibliothek PHP Data Objects zur Verfugung Beispiel ohne Prepared Statement dbh gt exec INSERT INTO REGISTRY name value VALUES dbh gt quote name PDO PARAM STR dbh gt quote value PDO PARAM INT Beispiel mit Prepared Statement stmt dbh gt prepare INSERT INTO REGISTRY name value VALUES name value stmt gt bindParam name name stmt gt bindParam value value Bis zur PHP Version 5 3 gab es die Konfigurationsoption magic quotes gpc War diese auf on gestellt wurden von aussen kommende Benutzereingaben automatisch maskiert Manche Skripte nutzen Funktionen wie etwa addslashes 4 oder mysql real escape string 5 Das heisst dass bereits allen relevanten Zeichen in den Benutzereingaben durch so genannte Magic Quotes 6 ein Backslash vorangestellt wurde und nun durch die Escape Funktion erneut ein Backslash vorangestellt wird Somit werden die Benutzereingaben verfalscht und man erhalt beispielsweise anstatt eines einfachen Anfuhrungszeichens ein Anfuhrungszeichen mit vorangestelltem Backslash Auch aus Grunden der Portabilitat sollte bei der Entwicklung von Anwendungen auf diese Einstellung verzichtet und stattdessen alle Eingaben manuell validiert und maskiert werden da nicht davon ausgegangen werden kann dass auf allen Systemen dieselben Einstellungen vorherrschen oder moglich sind Daruber hinaus sollte addSlashes nicht zum Maskieren von Datenbank Eingaben benutzt werden da es keine ausreichende Sicherheit gegenuber mysql real escape string gewahrleistet 7 Nach der PHP Version 5 3 wurde mysql real escape string durch MySQLi ersetzt Ab der Version 7 0 ist mysql real escape string nicht mehr verfugbar Ab PHP 7 x heisst die Funktion mysqli real escape string Grundsatzlich sind auch in puncto Sicherheit immer Prepared Statements vorzuziehen Perl Bearbeiten Mit dem datenbankunabhangigen Datenbankmodul DBI welches normalerweise in Perl verwendet wird Anstatt arrayref databasehandle gt selectall arrayref SELECT spalte1 FROM tabelle WHERE spalte2 spalte2Wert sollte Folgendes verwendet werden arrayref databasehandle gt selectall arrayref SELECT spalte1 FROM tabelle WHERE spalte2 spalte2Wert Perls DBI Modul unterstutzt ausserdem eine prepare Syntax ahnlich der aus dem Java Beispiel statementhandle databasehandle gt prepare SELECT spalte1 FROM tabelle WHERE spalte2 returnvalue statementhandle gt execute spalte2Wert Alternativ konnen uber das Datenbankhandle auch Eingabe Werte sicher maskiert werden Dabei achtet der DB Treiber auf die fur diese Datenbank typischen Sonderzeichen Der Programmierer muss keine tiefergehenden Kenntnisse daruber haben arrayref databasehandle gt selectall arrayref SELECT spalte1 FROM tabelle WHERE spalte2 databasehandle gt quote spalte2Wert Im sogenannten taint mode der skriptweit mit dem Parameter T aktiviert werden kann verwendet Perl starke Heuristiken um nur sichere Zugriffe zu erlauben Zeichenketten die vom Benutzer ubergebene Parameter enthalten werden zunachst als unsicher behandelt bis die Daten explizit validiert wurden und durfen vorher nicht in unsicheren Befehlen verwendet werden ColdFusion Markup Language Bearbeiten Unter ColdFusion kann das lt cfqueryparam gt Tag verwendet werden welches samtliche notwendigen Validierungen ubernimmt 8 SELECT FROM courses WHERE Course ID lt cfqueryparam value Course ID CFSQLType CF SQL INTEGER gt MS SQL Bearbeiten Uber parametrisierte Kommandos kann die Datenbank vor SQL Injections geschutzt werden SELECT COUNT FROM Users WHERE UserName AND UserPasswordHash Siehe auch BearbeitenSicherheit von WebanwendungenWeblinks BearbeitenSQL Injections Analyse Abusing Poor Programming Techniques in Webserver Scripts via SQL Injection englisch Sicherheit von Webanwendungen Massnahmenkatalog und Best Practices PDF 805 kB Bundesamt fur Sicherheit in der Informationstechnik BSI Web Security Threat Classification PDF 432 kB Steve Friedl SQL Injection Attacks by Example Advanced SQL Injection in MySQL PDF 935 kB SQL Injection im Comic xkcd xkcd com SQLi Videos zur Durchfuhrung und GegenmassnahmenEinzelnachweise und Ressourcen Bearbeiten Die Datenbank INFORMATION SCHEMA MySQL 5 1 Referenzhandbuch Kapitel 20 SQL Injection Prevention Cheat Sheet md Abgerufen am 24 Oktober 2019 10 Reasons to love SQLAlchemy In pajhome org uk Abgerufen am 20 Dezember 2016 addslashes PHP Manual mysql real escape string PHP Manual Magic Quotes PHP Manual Chris Shiflett addslashes Versus mysql real escape string englisch ColdFusion Online Hilfe Memento vom 24 November 2006 im Internet Archive nbsp Dieser Artikel wurde am 30 Juli 2005 in dieser Version in die Liste der lesenswerten Artikel aufgenommen Abgerufen von https de wikipedia org w index php title SQL Injection amp oldid 238153158