SQL-Injection – Kritischer Fehler mit großer Gefahr

Als SQL-Injection bezeichnet man das Einschleusen von Code in einen SQL-Query. Diese Art von Injection ermöglicht Angreifern einen Server zu kontrollieren und erheblichen Schaden anzurichten. Leider wird gerade Einsteigern in der Datenbanksteuerung oftmals nicht ausdrücklich klar gemacht, was eine SQL-Injection ist und wie gefährlich diese sind. Durch eine angehende SQL-Injection konnte 2011 das Sony PlayStation Netzwerk angegriffen und Benutzer- und Bankdaten unverschlüsselt entnommen werden.

SQL-Injections sind immer dann eine Gefahr, wenn Inputs von Clients unkontrolliert in das SQL-Statement eingesetzt werden, zum Beispiel über die PHP-Servervariablen $_POST, $_GET und $_COOKIE.

Unsicheres Beispiel in PHP:

/* Eingabe:
$_POST['kommentar'] = "hacked!') UNION DROP TABLE `comments`";
*/
$sql = "INSERT INTO `comments` VALUES('".$_POST['kommentar']."')";
mysql_query($sql);
/*
Diese Abfrage sieht zusammengesetzt so aus:
INSERT INTO `comments` VALUES('hacked!') UNION DROP TABLE `comments`')
*/

Man erkennt schnell die Gefahr, die hinter dieser Sicherheitslücke steckt. Das obige Beispiel würde die gesamte Datenbanktabelle “comments” löschen. Dies funktioniert durch das einfache Anführungszeichen ‘, welches hier als Kommentar gesendet wurde. Dieses unterbricht die für den Kommentar vorgesehene Zeichenkette.

Abhilfe verschafft z.B. die PHP-Funktion mysql_real_escape_string(). Sie escaped bzw. maskiert alle einfachen Anführungszeichen ‘, indem sie ihnen ein Backspace voran stellt \’. Dadurch wird die Zeichenkette nicht unterbrochen, sondern das Anführungszeichen ignoriert.

Sicheres Beispiel:

$sql = "INSERT INTO `comments` VALUES ('".mysql_real_escape_string($_POST['kommentar'])."')

Dieser Artikel wurde vertaggt mit , , .
Kategorien: Grundwissen, PHP, Sicherheit

Hat Ihnen dieser Artikel gefallen? - Dann abonnieren Sie vlblog um über neue Themen rund ums Web informiert zu werden.

Hinterlasse eine Antwort