Ecommerce, SEO, Gadgets, Mac und Internet Themen

SQL-Injections in PHP vermeiden

Kategorie: Internet Autor: Viktor Dite

In PHP steht zu diesem Zweck für fast jede verwendete Datenbank eine Escape-Funktion bereit.

Ein Beispiel für MySQL: anstatt

$abfrage = "SELECT spalte1
            FROM tabelle
            WHERE spalte2 = '".$_POST['spalte2Wert']."'";
$query = mysql_query($abfrage) or die("Datenbankabfrage ist fehlgeschlagen!");

sollte Folgendes verwendet werden:

$abfrage = "SELECT spalte1
            FROM tabelle
            WHERE spalte2 = '".mysql_real_escape_string($_POST['spalte2Wert'])."'";
$query = mysql_query($abfrage) or die("Datenbankabfrage ist fehlgeschlagen!");

Eine weitere Möglichkeit ist die Typumwandlung von Übergabeparametern.

$abfrage = "SELECT spalte1
            FROM tabelle
            WHERE spalte2 = " . intval($_POST['spalte2Wert']);
$query = mysql_query($abfrage) or die("Datenbankabfrage ist fehlgeschlagen!");

Ab PHP 5.1 sollten PHP Data Objects für Datenbankabfragen verwendet werden.

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

Oder als Prepared Statement:

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


Häufig wird aus Bequemlichkeit einfach die Konfigurationsoption „magic_quotes_gpc“ auf „on“ gestellt, mit der von außen kommende Benutzereingaben automatisch maskiert werden. Doch dies ist nicht empfehlenswert. Denn manche nicht selber programmierte Skripte setzen eigenständig Funktionen wie etwa addslashes() oder das bereits weiter oben genannte mysql_real_escape_string() ein. Das heißt, dass bereits allen relevanten Zeichen in den Benutzereingaben durch so genannte Magic Quotes ein Backslash vorangestellt wurde und nun durch die Escape-Funktion erneut ein Backslash vorangestellt wird. Somit werden die Benutzereingaben verfälscht und man erhält beispielsweise anstatt eines einfachen Anführungszeichens ein Anführungszeichen mit vorangestelltem Backslash (\”). Auch aus Gründen der Portabilität 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 möglich sind.

Das ist ein Auszug aus diesem Artikel


Bewertungen für: SQL-Injections in PHP vermeiden
1 Sterne2 Sterne3 Sterne4 Sterne5 Sterne (Keine Bewertungen bisher)
Loading ... Loading ...

Das könnte noch interessant sein:




Ein Blog Kommentar

  1. PHP-Friends:

    SQL Injections sind eine böse Sache. Hatte selber zwar noch nie großartige Probleme damit, weil man sie mehr oder weniger einfach umgehen kann. Momentan sind ja auch XSS-Attacken ganz “beliebt”.
    Anstelle von PDO benutzen ich MySQLi(OOP), einfach nur aus Gewohnheit. Oder hat PDO große Vorteile(außer mehr Datenbankunterstützungen) gegenüber MySQLi?
    lg PHP-Friends


Autor dieses Blogs
Viktor Dite bei Google+ Viktor Dite bei Twitter

Webworker & Blogger