MySQL-Injection

Hallo,
ich hab mal eine Frage wegen MySQL Injectionen.

Also ein "Kunde" fragte mich letzten, ob er meinen Script auf seinem Server installieren sollte oder ob er es lieber lassen sollte. Er hat sensible Kundendaten in der Datenbank die erschützen möchte.

Da ist mir nochmal das Thema "MySQL Injection" eingefallen und bei dem Script habe ich keinen Schutz dagegen.

Deswegen habe ich vorhin versucht für den Script eine Injection vorzunehmen, also erstmal bei google geschaut wie das geht ;) :

Normale URL:
datei.php?id=5

Abfrage:
$id = $_GET["id"];
$name_abfrage = "SELECT * FROM tabelle WHERE id LIKE '$id'";
$name_ergebnis = mysql_query($name_abfrage);
$name_row = mysql_fetch_object($name_ergebnis);

Also laut einem Bericht aus dem Internet nicht wirklich sicher, aber jetzt kommt mein Versuchter Angriff:

Angriffs URL:
datei.php?id=5;UPDATE%20user%20Set%20username='neu'%20WHERE%20id=3

Den Eintrag mit der id=3 gibt es wirklich.

Nochmal ohne störende Zeichen:
UPDATE user Set username='neu' WHERE id=3

Soll einfach nur den Username von ID=3 auf neu ändern.

Wenn ich das jetzt aufrufe, sagt er mit immer; MySQL_Error: supplied argument is not a valid MySQL

Der Eintrag wurde auch nicht geändert.

Ist an der Angriffs URL irgendwas was falsch, oder funktioniert MySQL Injection nicht bei neueren Varianten von PHP bzw. muss die Abfrage anders aussehen?

P.S. Wie man sich dagegen schützt weiß ich. Sofern es geht würde ich mich auch beeilen alle Abfragen anzupassen.

Danke

Edit
Hab mal etwas geooglet:
Um etwas schonmal vorweg zu nehmen, mehrere MySQL-Querys werden durch Semikolons getrennt. Aus Sicherheitsgründen führt PHP aber nur den 1. MySQL-Query aus. Wenn man mehrere MySQL-Querys ausführen möchte, muss man entsprechend so viele mysql_query-Befehle aufrufen, oder die Querys in einem Array speichern und eine foreach-Schleife benutzen.

Ich wollte mal fragen ab welcher Version dies drin ist, und ob man das auch Ausschalten kann.

Wenn man das kann, wäre das ein großes Sicherheitsloch.
 
Original von Elderan
Abfrage:
$id = $_GET["id"];
$name_abfrage = "SELECT * FROM tabelle WHERE id LIKE '$id'";
$name_ergebnis = mysql_query($name_abfrage);
$name_row = mysql_fetch_object($name_ergebnis);

Also laut einem Bericht aus dem Internet nicht wirklich sicher, aber jetzt kommt mein Versuchter Angriff:

Angriffs URL:
datei.php?id=5;UPDATE%20user%20Set%20username='neu'%20WHERE%20id=3

Den Eintrag mit der id=3 gibt es wirklich.

Nochmal ohne störende Zeichen:
UPDATE user Set username='neu' WHERE id=3

Soll einfach nur den Username von ID=3 auf neu ändern.

probier mal was ala:

id = ". mysql_query('UPDATE user Set username='neu' WHERE id=3') ."3'"

der ganze string sollte dann ca so aussehen:

"SELECT * FROM tabelle WHERE id LIKE ".mysql_query('UPDATE user Set username='neu' WHERE id=3')."3";

was soviel bedeuted, dass zuerst das update gemacht (beim string zusammensetzen) wird und dann dein select
 
Zurück
Oben