dedlfix: SQL-Injection

Beitrag lesen

echo $begrüßung;

$query = "SELECT ... WHERE id = '".mysql_real_escape_string ($_GET['id'])."'";

hm.. aber id steht doch schon in '' also $_GET['id'].
Ist es in dem Fall nicht irrelevant weil id schon als String behandelt wird?

Meinst du, es gibt einen Unterschied zwischen $_GET['id'] und $_GET[id]? Ja, gibt es, aber der hat nicht mit den Anführungszeichen zu tun, die in der Ausgabe landen. Diese Anführungszeichen werden nur benötigt, um einen Schlüssel für das $_GET-Array anzugeben. Dieser Schlüssel ist ein Stringwert, weswegen er bei einer direkten Notation in '' oder "" einzufassen ist. Der Wert, der in diesem Array-Element enthalten ist, hat mit der Notation seines Abrufs nichts zu tun.

Zum Nachvollziehen lass dir bitte den Inhalt von $query ausgeben, wenn du bei obiger Zeile mal $_GET['id'] und mal $_GET[id] verwendest. Setze bitte außerdem das error_reporting auf E_ALL (und display_errors auf on), damit du auch den Unterschied zwischen $_GET['id'] und $_GET[id] siehst, so dir die Erklärung im Handbuch nicht genügt: Why is $foo[bar] wrong?.

echo "$verabschiedung $name";