Christian Kruse: Form-Mailer codiert Anführungszeichen

Beitrag lesen

Hoi,

Gratulation, du hast soeben ein Feature von PHP entdeckt, was es relativ
unmöglich macht, durch geschickten Code PHP-angebundene Datenbanken zu
löschen.

Häh?

Nun, stell dir vor, du uebergibst bei einer Datenbank-Suche den Parameter where.
Mit dem Parameter moechtest du die Where-Bedinung einschraenken:

mysql_query('SELECT felder FROM tabelle WHERE feld = "'.$where.'"') or die(mysql_error());

Jetzt gebe ich als Suchbegriff den folgenden Parameter ein:

abc"; DROB DATABASE datenbankname; DELETE FROM tabelle WHERE feld = "abc

So wird zuerst die Query ausgefuehrt, die durch das 'where' eingeschraenkt wird.
Dann wuerde sie durch das ; beendet, so dass die *eigentliche* Query so
aussieht:

SELECT felder FROM tabelle WHERE feld = "abc"; DROB DATABASE datenbankname; DELETE FROM tabelle WHERE feld = "abc"

Mit anderen Worten: die Datenbank mit dem Namen 'datenbankname' wuerde
geloescht, sofern du sie loeschen *darfst*. Wenn nicht, wuerden alle Datensaetze
geloescht aus der Tabelle 'tabelle'.

Das ganze wird durch ein PHP-Feature (naja) names 'Magic Quotes' verhindert:
die Anfuehrungs-Striche werden gequotet. So stuende jetzt mit 'Magic Quotes'
auf on die folgende Query da:

SELECT felder FROM tabelle WHERE feld = "abc"; DROB DATABASE datenbankname; DELETE FROM tabelle WHERE feld = "abc"

Das sieht doch schon viel freundlicher aus? :-)

Gruesse,
 CK