|
||||
|
Tutorials > PHP > SQL Injektionen SQL Injektionen verhindern Was sind SQL Injections? <?php
// Code... $query = mysql_query('SELECT * FROM News WHERE id = ' . $_GET['id']); // Für eine Ausgabe... mag normalerweiße anders aussehen... while ($row = mysql_fetch_array($query, MYSQL_ASSOC)) { foreach ($row as $key => $value) { echo "<b>$key</b>: $value<br />"; } } // Weiterer Code... ?> http://example.com/news.php?id=1
auf, so erscheint noch kein Fehler. Wird die Datei aber folgendermaßen aufgerufen http://example.com/news.php?id=1'
"You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near..."
Dies heißt in 99% der Fällen folgendes: Dieses Script ist angreifbar! http://example.com/news.php?id=-1337 UNION SELECT 1,DATABASE(),VERSION(),CONCAT(username,0x3a,password),5,6 FROM users
Hiermit würde man als Ausgabe den Namen der Datenbank, die MySQL Version sowie eine Liste mit den Userdaten, samt Passwort erhalten. Statt dem -1337 könnte man auch 99999 oder sonst irgendeine beliebige Zahl verwenden. Sie ist nur zu einem Zweck da: Damit nur das Ergebnis aus der SQL Injection ausgegeben wird. Die MySQL Funktion CONCAT() fügt mehrere Spalten und Zeichen zusammen. Hier verwandt, um eine Liste ala "Username:Passwort" zu generieren. Klar sein sollte, was DATABASE() bzw. VERSION() tut. Wie kann ich mich schützen? Alle Variablen vor dem senden an die Datenbank überprüfen (existent, leer?) und mit der Escape Funktion für die jeweilige Datenbank-Extension die "bösen Zeichen" maskieren. In MySQL geht das folgendermaßen: <?php
$id = mysql_real_escape_string($_GET['id']); $query = mysql_query('SELECT * FROM News WHERE id = ' . $id); ?> Bitte teilen Sie uns und allen Besuchern von Simlau.net Ihre Meinung zu diesem Artikel mit.
|
|||
|
||||
|
Blog | Forum | RSS 2.0 | Sitemap | Impressum Copyright (c) 2006-2008 by Simlau.net |
||||