Hallo Andavos,
Jetzt haben ich einen recht aufwendigen Script den jeder frei benutzen darf, allerdings werden da bei $_POST etc. der Text nicht per addslashes Maskiert.
*pfui* sowas ist virtueller Selbstmord. Du darfs _nie_ und unter _keinen_ Umständen Daten die vom User kommen verwenden (oder gar in eine Query einbauen) ohne sie überprüft und "entschärft" zu haben!
Ohne magic_quotes_gpc
$aendern = "UPDATE tabelle Set spalte = 'Hallo 'Welt'' WHERE id = '1'";
was passiert an dieser Stelle, wenn der User als Wert »' #« eingibt? Richtig, im Query steht dann
UPDATE tabelle Set spalte = '' #' WHERE id = '1'
- und da # einen Kommentar einleitet, wird alles dahinter ignoriert und der Query
UPDATE tabelle Set spalte = ''
wird ausgeführt (dass damit in jeder Zeile die Spalte »spalte« geleert wird, dürfte klar sein).
$update = mysql_query($aendern);
Fehlerbehandlung? (->mysql_error())
Gut dachte ich mir, jetzt packst du vor jeder Abfrage einmal addslashes()
nein, das ist auch falsch, um Daten für einen Query zu entschärfen gibt es mysql_escape_string().
allerdings macht da der Script zicken, wenn magic_quest_gpc = On ist, denn dann wird der Text doppelt maskiert:
dann prüf vorher ob magic_quotes_gpc gesetzt ist und wende addslashes an wenn get_magic_quotes_gpc() 0 zurückgibt (wobei addslashes() ja sowieso die falsche Funktion ist s.o.).
Naja wie gesagt es ist ein recht komplexer Script mit recht vielen Abfragen, dieser basierd auf Grund von Wissenheit darauf, das magic_quotes_gpc = On ist, was bei den meisten der Fall ist.
magic_quotes_gpc ist dazu da, solche Dummheiten abzufangen, und nicht dazu sich darauf zu verlassen.
Hat jemand evt. ne andere Idee wie ich in dem Fall das es auf Off steht "umschalten" kann.
auf http://de3.php.net/ini_set steht bei magic_quotes_gpc der Wert PHP_INI_PERDIR, d.h. die Einstellung kann zwar für ein Verzeichnis (.htaccess) geändert werden, nicht aber im Script selbst.
Grüße aus Nürnberg
Tobias