magic_quote()

Gesperrt
calvini
Beiträge: 95
Registriert: Mo 21. Feb 2005, 12:06
Kontaktdaten:

magic_quote()

Beitrag von calvini »

Mag jetzt ketzerisch daherkommen, aber ich bin gerade aus allen Wolken gefallen, als ich mir die globals_off.inc.php angeguckt habe.

Ich versuche im Moment, mein Entwicklungssystem mit integrierter Debug-Unterstützung in friedlicher Koexistenz mit Contenido zum Laufen zu bringen. Nachdem ich von meinen Formularen einen Haufen von unerwünschten Backslashes zurückbekommen habe, obwohl bei meinen Systemen wohlweislich der ganze magic_*-Sums ausgeschaltet ist, musste ich dort sehen, dass jeder einzelnen externen Variable, ob nun von Contenido oder nicht, die Backslashes aufgezwungen werden. Deshalb zwei zentrale Fragen:
  1. Wieso werden die Backslashes nicht nur genau an den Stellen hinzugefügt, wo es notwendig ist (m. E. eigentlich nur beim Schreiben in eine Datenbank)?
  2. Ist geplant, das irgendwann so umzustellen, dass die Backslashes nur genau an den Stellen hinzugefügt werden, wo es notwendig ist?
Und hier noch zwei nichtzentrale Fragen ;-): Ist es nicht ein unnötiger Overhead, mit der addslashes_deep()-Kanone auf alle externen Variablen-Spatzen zu schießen? Zudem wird in der aktuellen Version auch die Einstellung "variables_order" (bzw. "gpc_order") ausgehebelt. Könnte nicht auch das bei etwas komplexeren Modulen zu Problemen führen?
emergence
Beiträge: 10653
Registriert: Mo 28. Jul 2003, 12:49
Wohnort: Austria
Kontaktdaten:

Beitrag von emergence »

ad.1
weil es so einfacher war...
contenido ist so gebaut, das magic_quotes on sein muß...
die datei trägt nur dafür sorge das contenido auch funktioniert wenn es nicht so ist...

ad.2
da wird irgendwann mal kein weg daran vorbei führen... zb php6 unterstützung...
Ist es nicht ein unnötiger Overhead, mit der addslashes_deep()-Kanone auf alle externen Variablen-Spatzen zu schießen?
sicher... jedoch die meisten cms systeme arbeiten mit ähnlichen mechanismen...
Zudem wird in der aktuellen Version auch die Einstellung "variables_order" (bzw. "gpc_order") ausgehebelt.
solch komplexe scripte sind so selten, das ich bis jetzt noch keines gesehen hab... es ließe sich aber in der datei so korrigieren, das dieser umstand berücksichtig werden würde...
hatte ich zwar schon mal vor, aber dann hatte ich doch besseres zu tun...
*** make your own tools (wishlist :: thx)
calvini
Beiträge: 95
Registriert: Mo 21. Feb 2005, 12:06
Kontaktdaten:

Beitrag von calvini »

Schade - da muss ich wohl weiteren Overhead einbauen, um den Ursprungszustand meiner Variablen wiederherzustellen. Aber PHP6 wird ja bestimmt irgendwann kommen ;).

Zur Umsetzung: Was würdest du eher machen (auch im Bezug auf die Performance): In globals_off.inc.php Kopien der Originale von $_POST, $_GET, $_COOKIE und $_REQUEST erzeugen und diese verwenden (würde dann immer passieren, Kopieren dürfte aber nicht allzuviel Zeit kosten (?)) oder je nach Bedarf eine Art removeslashes_deep() auf die Arrays loslassen (passiert nur wenn nötig, ist aber wahrscheinlich zeitaufwändiger als Kopieren)?
emergence hat geschrieben:
Zudem wird in der aktuellen Version auch die Einstellung "variables_order" (bzw. "gpc_order") ausgehebelt.
es ließe sich aber in der datei so korrigieren, das dieser umstand berücksichtig werden würde...
hatte ich zwar schon mal vor, aber dann hatte ich doch besseres zu tun...
Unperformant, aber einfach:

Code: Alles auswählen

      $_REQUEST = array_merge($_GET, $_POST, $_COOKIE);
ersetzen durch

Code: Alles auswählen

      $_REQUEST = array_map('addslashes_deep', $_REQUEST);
Damit erschlägst du gleich auch mögliche zukünftige Erweiterungen für $_REQUEST.
emergence
Beiträge: 10653
Registriert: Mo 28. Jul 2003, 12:49
Wohnort: Austria
Kontaktdaten:

Beitrag von emergence »

Zur Umsetzung
dann würde ich mit kopien arbeiten...
Unperformant, aber einfach
nur die eine zeile zu ändern wird nicht reichen...
es wird ja auch kontrolliert ob $_REQUEST zur verfügung steht...
das wird dort ja mit erledigt...
beim extract der einzelnen werte müsste man die variables_order auch mit berücksichtigen...
*** make your own tools (wishlist :: thx)
calvini
Beiträge: 95
Registriert: Mo 21. Feb 2005, 12:06
Kontaktdaten:

Beitrag von calvini »

Mein Fehler, wer lesen kann, ist klar im Vorteil. $_REQUEST wird ja an der Stelle gar nicht geändert, sondern neu erzeugt, mein Vorschlag ist also Blödsinn :oops:.

Allerdings könnte ich eventuell in meinen Skripten einfach $_REQUEST verwenden, da es bei mir schon vorliegt (PHP-Version > 4.1.0) und soweit ich das sehe, dann auch nicht mit Slashes verziert wird. Oder übersehe ich da wieder etwas?

Ja, selbst schon erkannt:

Code: Alles auswählen

 || $cfg['simulate_magic_quotes']
macht den Unterschied. Also doch Kopien erzeugen.
Gesperrt