Felix Riesterer: kontext-gerechtes Kodieren

Beitrag lesen

Lieber Salih,

Usereingaben sind mit einer professionellen Paranoia grundsätzlich als Angriff zu verstehen. Daher sind sie immer dann entsprechend zu maskieren, wenn sie in einen anderen Kontext übertragen werden sollen. In Deinem Fall ist das der Übergang von "Usereingabe" zu "Datenbankspeicherung". Deine Daten ändern also ihren Kontext und müssen diesem Kontext entsprechend kodiert werden.

Sonderzeichen wie z.B. einfache oder doppelte Anführungszeichen in Usereingaben sind so gut wie immer problematisch, nicht nur beim Abspeichern in einer DB. Daher gibt es eine PHP-Einstellung, die Anführungszeichen schon beim Datenempfang maskiert. Dabei wird automagisch ein Backslash vor das entsprechende Zeichen gesetzt. Diese Einstellung kann aktiviert sein, oder auch nicht. Um das zu überprüfen benutzt man get_magic_quotes_gpc(), um dann die Daten nötigenfalls wieder zurückzuwandeln.

Um nun sicher zu gehen, dass die Eingaben exakt so in die DB wandern (und später wieder herauskommen), musst Du also eine entsprechende Funktion auf die Daten anwenden, die Dir das Kodieren abnimmt. In PHP gibt es je nach Kontext passende Kodierfunktionen. Ich liste Dir drei davon auf:

* addslashes zum Maskieren von Anführungszeichen
* mysql_real_escape_string() zum Speichern in DBs
* htmlspecialchars zum Schreiben in X(HT)ML-Dokumente

So. Um das Rück-Kodieren darfst Du Dich nun selber kümmern. Der Zusammenhang sollte nun klar sein.

Liebe Grüße,

Felix Riesterer.

--
ie:% br:> fl:| va:) ls:[ fo:) rl:° n4:? de:> ss:| ch:? js:) mo:} zu:)