Variablen $PHP_SELF und $QUERY_STRING

Gesperrt
xmurrix
Beiträge: 3149
Registriert: Do 21. Okt 2004, 11:08
Wohnort: Augsburg
Kontaktdaten:

Variablen $PHP_SELF und $QUERY_STRING

Beitrag von xmurrix » Mo 4. Aug 2008, 15:11

Hallo,

anscheinend werden die Variablen $PHP_SELF und $QUERY_STRING mittlerweile nicht gesetzt, sind dennoch an ein paar Stellen im Gebrauch.

Mir ist aufgefallen dass in der main.loginform.php die URL im action-Attribut nicht richtig ausgegeben wird

Code: Alles auswählen

<form name="login" method="post" action="<?php echo $this->url() ?>">
$this ist dabei eine Instanz von Contenido_Challenge_Crypt_Auth, $this->url() ruft dient als wrapper für $GLOBALS["sess"]->self_url() und darin verwendete Variablen $PHP_SELF, $QUERY_STRING sind nicht gesetzt, beide haben NULL:

Code: Alles auswählen

  function self_url() {
    global $PHP_SELF, $QUERY_STRING;

    return $this->url($PHP_SELF.
           ((isset($QUERY_STRING) && ("" != $QUERY_STRING)) ? "?".$QUERY_STRING : ""));
  }
$sess->self_url() liefert immer die URL ohne Pfad.

Sollte das vielleicht auf $_SERVER[*] umgestellt werden oder?

Habe Contenido 4.8.7 mit PHP 5.2.2 und register_globals=Off

Grüße
xmurrix

Dodger77
Beiträge: 3626
Registriert: Di 12. Okt 2004, 20:00
Wohnort: Voerde (Niederrhein)
Kontaktdaten:

Beitrag von Dodger77 » Mo 4. Aug 2008, 15:28

Ich verschieb's mal.

xmurrix
Beiträge: 3149
Registriert: Do 21. Okt 2004, 11:08
Wohnort: Augsburg
Kontaktdaten:

Beitrag von xmurrix » Mo 4. Aug 2008, 21:22

Beheben lässt sich das auf die Schnelle in der /contenido/includes/globals_off.inc.php mit dem Hinzufügen der folgenden 2 Zeilen an das Ende des Scriptes:

Code: Alles auswählen

// We need still following 2 variables, see usage in phplib dir...
$PHP_SELF     = $_SERVER['PHP_SELF'];
$QUERY_STRING = $_SERVER['QUERY_STRING'];
Früher wurde die Superglobale $_SERVER auch in den globalen Scope extrahiert, was ab der 4.8.7 nicht mehr der Fall ist.

Grüße
xmurrix

emergence
Beiträge: 10645
Registriert: Mo 28. Jul 2003, 12:49
Wohnort: Austria
Kontaktdaten:

Beitrag von emergence » Di 5. Aug 2008, 11:08

warum das $_SERVER entfernt wurde ist mir leider auch nicht klar...

:motz:
*** make your own tools (wishlist :: thx)

timo.trautmann_4fb
Beiträge: 472
Registriert: Di 15. Apr 2008, 15:57
Wohnort: Michelstadt
Kontaktdaten:

Beitrag von timo.trautmann_4fb » Mo 11. Aug 2008, 17:11

Lösungsvorschlag von xmurrix checkin. Die Globals off wurde damals aus Sicherheitsgründen zum Escapen eingefügt. Da die Variablen ENV und SERVER jedoch read only sind wurden diese entfernt.

emergence
Beiträge: 10645
Registriert: Mo 28. Jul 2003, 12:49
Wohnort: Austria
Kontaktdaten:

Beitrag von emergence » Di 12. Aug 2008, 10:54

anmerkung:

um das jetzt mal richtig zu stellen...

$_ENV und $_SERVER wurden nie verändert...

einerseits wenn eine php version kleiner als 4.1.0 zum einsatz kam wurden die $_??? zur verfügung gestellt...
gut, das wird wirklich nicht mehr benötigt...

$_ENV und $_SERVER wurden als $HTTP_ENV_VARS und $HTTP_SERVER_VARS zur verfügung gestellt wenn register_long_arrays auf off ist...
das wäre vernünftig wenn man es drinnen läßt...

und hier

Code: Alles auswählen

$types_to_register = array ('GET', 'POST', 'COOKIE', 'SESSION');
wenn SERVER enthalten wäre
werden so nette sachen wie $PHP_SELF und $QUERY_STRING automatisch erzeugt....
*** make your own tools (wishlist :: thx)

timo.trautmann_4fb
Beiträge: 472
Registriert: Di 15. Apr 2008, 15:57
Wohnort: Michelstadt
Kontaktdaten:

Beitrag von timo.trautmann_4fb » Di 12. Aug 2008, 11:23

Werde ich nachher noch übernehmen.

Gesperrt