Ecommerce, SEO, Gadgets, Mac und Internet Themen

SQL-Injections in PHP vermeiden

Kategorie: Internet Autor: bei Google+

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!");</pre>

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!");</pre>

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).")");</pre>

Oder als Prepared Statement:

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


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:




Magst Du mit mir und Anderen über dieses Thema diskutieren? Schreib doch etwas ins Kommentar und lass uns darüber reden!

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


wpSEO optimiert Blogs für Suchmaschinen - automatisch und effizient.
Viktor Dite Mizine on Twitter Viktor Dite on Google+