PHP/MySQL - Praxistutorial 2 - Daten absichern Teil 1
1. Die Abschnitte
- Überblick
- Notices
- Notices abfangen
- Daten überprüfen Teil 1
- Daten überprüfen Teil 2
- Daten absichern Teil 1
- Daten absichern Teil 2
2. Fremde Zungen
Mittlerweile gibt es in Deutschland ja zig Zahnärzte, deren Ursprung in anderen Ländern liegt. Das merkt man auch am Namen. Und das kann ein Problem sein. Nicht das die von anderswo herkommen, sondern dass sie zum Beispiel ein Hochkomma im Namen haben.
Um euch jetzt mal die Problematik zu zeigen, wollen wir den Datensatz eines Herstellers ändern. Also ruft man die entsprechende Seite auf,
wählt einen Datensatz aus und ändert den Namen in Al Hr'abiri
. Keine Ahnung ob es so einen arabischen Namen gibt. Er klingt
zumindest so, aber egal. Wenn ihr die geänderte Eingabe abspeichert, so gibt es zwei Möglichkeiten.
3. Eine Fehlermeldung
Das geschieht, wenn in der php.ini
der Wert für magic_quotes_gpc
auf Off
steht. Denn dann passiert
dieses. Wir schicken eine Anfrage an die die Datenbank, deren Anfang so aussieht.
UPDATE
hersteller
SET
zulieferer = 'Al Hr'Abiri',
Wie das geübte Auge schnell erkennt, gibt es einen Syntaxfehler. Und zwar genau an der Stelle, wo wir im Namen das Hochkomma gesetzt haben.
Also wird die Abfrage nicht ausgeführt. Wer ein lokales Testsystem hat, auf dem es
trotzdem funktioniert, sollte mal spaßeshalber den Eintrag in der php.ini
anpassen, den Apache neu starten
und sich die Meldung ansehen.
Erklärung
Wenn magic_quotes_gpc
auf Off
steht, so wird die Datenbankanfrage einfach an den MySQL-Server geschickt. Was
sonst geschieht, zeige ich euch nun.
4. Keine Fehlermeldung
... kommt, wenn obige Bedingung erfüllt ist. Also der Wert von magic_quotes_gpc
auf On
steht. Dann werden
automatisch alle Hochkommata, Anführungszeichen, Backslashes (\) und der Wert NULL
escaped, bevor die Abfrage abgeschickt wird. Wenn ihr jetzt mal direkt in eure Datenbank
schaut, dann steht dort korrekt Al Hr'Abiri
.
Aber!
Darauf sollte man sich nicht verlassen. Ändert jetzt mal das Al Hr'Abiri
und tragt <script
type="text/javascript">alert('hallo');</script>
ein. Dann plöppt nach dem Speichern eine Alert-Box auf. Und das ist ein
ziemliches Sicherheitsrisiko. Die Details dazu erfahrt ihr hier.
Außerdem ist die Einstellung magic_quotes_gpc
mit PHP 5.3 als deprecated eingestuft worden und verschwindet mit der Version 6 endgültig. Der Sinn dahinter ist, dass der Programmierer
sich selbst um Benutzereingaben kümmern und nicht blind auf PHP verlassen soll. Und dazu komme ich jetzt.
zurück zum vorherigen Abschnitt weiter zum nächsten Abschnitt