SQL-Injection

Teil 5: SQL-Injection: So schützen Sie Ihre Webserver vor Hackerangriffen

In der Zwischenzeit hat auch die sehr populäre MySQL-Datenbank mit der MySQLi-Erweiterung Prepared Statements dazugelernt. Manche Web-Programmierer zögen allerdings, auf die aktuellste PHP-Version 5.3 und MySQL-Version 5.1 umzusteigen, weil sie eben die mysqli-Erweiterung mit sich bringt und eine Aktualisierung der Skripte erfordert, die für MySQL 3.22 bis 5.0 entstanden sind.

Ab PHP 5.1 sollten für Datenbankabfragen bevorzugt PHP Data Objects (PDO) verwendet werden, eine PHP-Erweiterung, die eine Datenbankschnittstelle bereitstellt. Das folgende Beispiel illustriert den Einsatz von PHP Data Objects für Datenbankabfragen:

$dbh->exec("INSERT INTO REGISTRY
(name, value) VALUES (".$dbh->quote($name,PDO::PARAM_STR).", ".$dbh->quote($value,PDO::PARAM_INT).")");

und als Prepared Statement:

$stmt = $dbh->prepare("INSERT INTO
REGISTRY (name, value)VALUES (:name, :value)");
$stmt->bindParam('name', $name);
$stmt->bindParam('value', $wert);

Bei Datenbanktreibern, die Prepared Statements nicht unterstützen, kann die PDO-Erweiterung Prepared Statements emulieren.

Typumwandlung von Übergabeparametern

Eine weitere Möglichkeit zum Abschirmen des Datenbankservers bietet die Typumwandlung von Übergabeparametern, wie in dem folgenden Beispiel:

WHERE spalte2 = " .
intval($_POST['spalte2Wert']);
$query = mysql_query($abfrage) or
die("Die Datenbank konnte nicht abgefragt werden! ");

Scheinsicherheit: MDd5-Hashes

Der Einsatz des MD5-Algorithmus zum Kodieren des verwendeten Datenbankpassworts bietet nicht die benötigte Sicherheit. Denn zum einen kann der Code heute ohne übermäßigen Aufwand gebrochen werden und zum anderen lässt sich die Passwortabfrage mit etwas Geschick ganz umgehen, wenn die Eingabe nicht gefiltert wird.

MD5 steht für Message Digest Algoritm 5 und ist eine breit eingesetzte kryptografische Hash-Funktion mit einem 128-Bit-Hash-Wert. Leider bietet dieser mittlerweile in die Jahre gekommene MD5-Algorithmus nur noch unzureichenden Schutz.

$password_hash =
md5($_POST['passwort']);
$sql = "SELECT count(*)
FROM usersWHERE benutzername = '{$_POST['benutzername']}'AND passwort = '$passwort_hash'";

Bereits ganz gewöhnliche PCs sind heutzutage mit mehreren Kernen bestückt und so ist Rechenleistung in hinreichend großem Umfang erschwinglich geworden. Darüber hinaus lässt sich nicht nur die CPU, sondern auch die GPU - mit passender Software - zum Dekodieren von MD5-Hashes missbrauchen.

Sicherheit

© Archiv

Wer eine Datenbank-Bibliothek mit Unterstützung für gebundene Parameter und Platzhalter wie zum Beispiel PEAR::DB, PDO einsetzt, kann sich über zusätzliche Sicherheit freuen.

Dass es sich dabei nicht nur um eine theoretische Möglichkeit handelt, hat die HPC-Users-Group (High-Performance-Cluster) aus New York City bewiesen. Eines ihrer Mitglieder, Mario Juric, hat ein Tool zum Decodieren von MD5-Hashes auf einer GPU geschrieben. Nutzt man eine Nvidia-8800-Ultra-Grafikkarte, so beschleunigt sich die MD5-Hash-Berechnung im Vergleich zu einem Intel Q6700 @ 2,66 GHz um den Faktor 36.

Im Vergleich zu einem gleich getakteten Intel Quad-Core ist die GPU immer noch 9 x schneller. Und als ob das noch nicht genug wäre, kann man auch MD5-Hashes im Internet unter abfragen.

Kombiniert der Hacker eine stumpfe Brute-Force-Attacke mit dem geschickten Einsatz von Wörterbüchern und MD5-Hash-Datenbanken, so ist der MD5-Algorithmus leider kein wirkliches Hindernis mehr.

Während sich die Komplexität des MD5- Algorithmus mit der Zeit nicht verändert, nimmt dagegen jedoch die Leistungsstärke von GPUs in Grafikkarten und CPUs ständig zu, was bedeutet, dass der MD5-Algorithmus - zumindest in der jetzigen Form, die in PHP 4.x und 5.x eingebaut ist, auf verlorenem Posten steht.

Die Salt-Routine

Die Zeit ist natürlich nicht stehen geblieben und wer auch heute noch sicherstellen möchte, dass ein Passwort den eigentlichen Zweck erfüllt, sollte es mit der "salt"-Routine schützen. Eine mögliche Umsetzung sieht zum Beispiel wie folgt aus:

$salt = "EineSuperLangeNichtZu
ErratendeTextzeichenketteSchuetztVorUnsicherenPasswoertern";
$benutzerpasswort =
$POST['passwort'];
$md5pass = md5($salt .
$benutzerpasswort);

Sicherheits-Tipp: Unix-Anwender (einschließlich BSD, Linux, Mac OS X und Solaris) können mittels chroot einen Prozess in einem Verzeichnis gefangen nehmen, um zu verhindern, dass er Daten in anderen Verzeichnissen überschreiben kann.

Mehr zum Thema

Youtube Sperre umgehen GEMA
Videos freischalten

So umgehen Sie die GEMA-Sperre bei Youtube. Was Sie dazu brauchen, und wie es am einfachsten geht.
Neue Fritzboxen unterstützen den AC-Standard.
WLAN-Geschwindigkeit verdoppeln

Mehr WLAN-Geschwindigkeit: Mit dem WLAN-Standard 802.11ac und den richtigen Geräten und Einstellungen verdoppeln Sie den Datendurchsatz.
Netflix auf dem TV
Programm in der Übersicht

Welche Filme und Serien gibt es bei Netflix eigentlich zu sehen? Was ist neu im Streaming-Angebot? Diese Antworten helfen weiter.
Netflix
Streaming

Preise, kompatible Geräte, Datenrate, Serien- und Filmangebot von Netflix: Wir beantworten die wichtigsten Fragen rund um den Streaming-Dienst.
E.T. – Der Außerirdische
Vorschau auf Film- und Serien-Highlights

Amazon Prime Instant Video lockt im Dezember 2016 mit Film-Highlights wie "E.T.", "Fast & Furious 7" und der Serie "Ku’damm 56​".