Das Skript ist in PHP und als DB verwende ich MySQL. Hier ist das Skript selbst.Ist diese Abfrage sicher vor SQL-Injektion?
$unsafe_variable = $_GET["user-input"];
$sql=sprintf("INSERT INTO table (column) VALUES('%s')",$unsafe_variable);
mysql_query($sql);
Manche Leute sagen, dass, wenn der Benutzer ;DROP TABLE blah;
Zeichenfolge an die Variable $ ordnet unsafe_variable es die Tabelle löscht.
Aber ich versuchte, dieses Beispiel
http://localhost/test.php?user-input=DROP%20TABLE%20my_table
Aber es hat nicht die Tabelle löscht, sondern eine neue Zeile (;DROP TABLE blah;)
in der Tabelle eingefügt.
Kann mir jemand erklären, wie es möglich ist, dieses Skript mit SQL-Injektionen anzugreifen?
'mysqli' oder' PDO' und ihre vorbereiteten Anweisungen würde sei eine bessere Wahl. – Powerlord
Vielen Dank für alle Teilnehmer der Frage. Ich habe wirklich gemerkt, dass wir mit 'sprintf' nicht sicher sein können, dass unsere Abfrage vor ** sql-injections ** sicher ist. Für dieses spezielle Beispiel konnten weder ich noch die Teilnehmer den Weg zur Ausführung von sql-injection darstellen. Aber ich habe ein gutes SQL-Beispiel gefunden, wo wir sql-injection ausführen können, auch wenn wir 'sprintf' verwenden. Das SQL-Beispiel kann [hier] (http://php.net/manual/en/function.mysql-real-escape-string.php "PHP Online Manual") gefunden werden. Siehe Abschnitt "Beispiel # 2 Ein Beispiel für einen SQL Injection Attack" – Bakhtiyor