Sabine: register_globals

Ich brauche dringend Hilfe.
Mein Serverbetreiber hat die Einstellungen geändert, er hat register_globals auf off gestellt. Der Hintergrund ist mir nicht plausibel. Seit dem gehen bei mir fast alle Scripte nicht mehr.
Es zeigt die Fehler an:

Parse error: parse error, unexpected T_ENCAPSED_AND_WHITESPACE,
expecting T_STRING or T_VARIABLE or T_NUM_STRING

und auch diesen Fehler:

Warning: Unknown(): Your script possibly relies on a session side-effect
which existed until PHP 4.2.3. Please be advised that the session
extension does not consider global variables as a source of data, unless
register_globals is enabled. You can disable this functionality and this
warning by setting session.bug_compat_42 or session.bug_compat_warn to
off, respectively. in Unknown on line 0

Muß ich jetzt alle! Scripte umschreiben? Ich bin über jeder Hilfe Dankbar!

Sabine

  1. Hallo Sabine!

    Muß ich jetzt alle! Scripte umschreiben? Ich bin über jeder Hilfe Dankbar!

    Ja! Dies wäre prinzipiell aber auch schon immer angebracht gewesen. Nicht umsonst ist in den neues PHP-Releases register_globals off. Manche Anbieter bieten aber noch eine Fallbacklösung. 1und1 unter anderem die, dass man mit *.php die Version 4 mit regsiter_globals on und mit *.php5 regsiter_globals off mit PHP 5 wählen kann. Vielleicht kann Dir Dein Anbieter dabei helfen.

    Schönen Gruß

    Afra

  2. »»

    Mein Serverbetreiber hat die Einstellungen geändert, er hat
    register_globals auf off gestellt. Der Hintergrund ist mir nicht
    plausibel.

    »»

    Der Grund ist "Sicherheit". Dadurch werden nur noch SuperGlobale Variablen akzeptiert. Das wiederum heißt:
    Bisher konntest Du ein Formular mit einem Namen versenden und diesen mit der Variable $name wieder entgegen nehmen. Das geht nicht mehr...
    Stattdessen musst Du nun $_POST['name'] nehmen. Also mit der SuperGlobalen $_POST.
    Wenn Du die Variable $name trotzdem nutzen willst, muss sie erst von $_POST übergeben werden. Also $name = $_POST['name'];.
    Das Gleiche gilt für $_GET, $_SESSION, $_COOKIE uvm.

    Weitere Info gibts unter http://de.php.net/register_globals

    Gruß,
    Stevie B.

  3. Hallo Sabine,

    Mein Serverbetreiber hat die Einstellungen geändert, er hat register_globals auf off gestellt.

    Das ist schon in Ordung - ich vermute aber mal, dass er einfach eine neue Version installiert hat ...

    Der Hintergrund ist mir nicht plausibel.

    wie die anderen schon schrieben: Sicherheit.

    Parse error: parse error, unexpected T_ENCAPSED_AND_WHITESPACE,
    expecting T_STRING or T_VARIABLE or T_NUM_STRING

    Das hat imho nichts mit register_globals zu tun - wie sieht denn die Stelle an der der Fehler auftritt aus?

    Grüße aus Nürnberg
    Tobias

    1. Hi Tobias!

      Parse error: parse error, unexpected T_ENCAPSED_AND_WHITESPACE,
      expecting T_STRING or T_VARIABLE or T_NUM_STRING
      Das hat imho nichts mit register_globals zu tun

      Kommt darauf an, was sie mit ihren Variablen macht und in welche anderen Variablen sie speichert. :)

      MfG H☼psel

      --
      "It's amazing I won. I was running against peace, prosperity, and incumbency."
      George W. Bush speaking to Swedish Prime Minister unaware a live television camera was still rolling, June 14, 2001
      Selfcode: ie:% fl:( br:> va:) ls:& fo:) rl:? n4:& ss:| de:] js:| ch:? sh:( mo:) zu:)
  4. Da brauche ich ja Tage, eh ich alles umgeschrieben habe. Gibt es nicht eine globale Lösung (Script), so das ich meine alten Scripte noch bis zu fertigen Überarbeiten online laufen lassen kann, trotz der neuen Version auf dem Server?

    1. Da brauche ich ja Tage, eh ich alles umgeschrieben habe. Gibt es nicht eine globale Lösung (Script), so das ich meine alten Scripte noch bis zu fertigen Überarbeiten online laufen lassen kann, trotz der neuen Version auf dem Server?

      Kurz und bündig: Nein.

      Wenn du ein register_globals einfach so ändern könntest, kann sich der Serverbetreiber auch gleich die Sicherheitsupdates sparen.

      Das einzige, was du machen kannst, ist deinen Betreiber zu bitten, für einige Tage/Wochen register_globals on nur für deinen VHost zu setzen, damit du Zeit zum ändern hast.
      Ic hab das auch für einen Kunden gemacht, weil sonst sein Onlineshop nicht mehr gelaufen wäre nach der Umstellung auf PHP5 (Cgi) mit suPHP und register_globals off

      Wenn er das nicht tut, wünsch ich dir viel Spass bei den Nachtschichten und viel Erfolg beim lernen, wie du gleich Sinnvoll programmierst ;)

    2. Hallo Sabine,

      Da brauche ich ja Tage, eh ich alles umgeschrieben habe. Gibt es nicht eine globale Lösung (Script), so das ich meine alten Scripte noch bis zu fertigen Überarbeiten online laufen lassen kann, trotz der neuen Version auf dem Server?

      Wenn dein Provider einen Apachen verwendet und du .htaccess-Dateien verwenden darfst, könnte ein
       php_flag register_globals on
      in einer .htaccess helfen, siehe http://www.php.net/configuration.changes

      Grüße aus Nürnberg
      Tobias

    3. Hi,

      Gibt es nicht eine globale Lösung (Script), so das ich meine alten Scripte noch bis zu fertigen Überarbeiten online laufen lassen kann, trotz der neuen Version auf dem Server?

      Am Anfang des Scripts sowie zu Beginn *jeder* Funktion, die diese globalen Variablen verwendet, kannst Du folgende Zeile packen:

      foreach($_REQUEST as $key=>$value) { $$key=$value; }

      Dann klappt's erstmal.

      Aber daß deine Scripte nicht mehr laufen, ist ein *sehr* deutliches Indiz auf Sicherheitsmängel, die Du mit obigem Schnippsel wieder herstellst! Korrigiere also *unbedingt* deinen Code.

      Gruß, Cybaer

      --
      Hinweis an Fragesteller: Fremde haben ihre Freizeit geopfert, um Dir zu helfen. Helfe Du auch im Archiv Suchenden: Beende deinen Thread mit einem "Hat geholfen" oder "Hat nicht geholfen"!
  5. zur not tuts am anfang der scripte auch erstmal

    <?php
    foreach($_POST AS $key => $value) {
    $key = $value;
    }
    ?>

    bei register_globals = off musst du ja beispielsweise bei
    <input type="text" name="postleitzahl" />

    $_POST['postleitzahl'] nehmen, statt einfach $postleitzahl

    Diese Arbeit wird Dir durch den oberen Codeschnipsel abgenommen.