Safety First! register_globals=off


Nachdem ich unsanft auf eine register_globals verwandte Sicherheitslücke im Joomla-Component Community Builder aufmerksam gemacht worden bin (nach Analyse des access Logs, und der eingeschleusten Backdoors ist dieser Fehler aufgrund meiner Hinweise nun vom CB-Entwickler geschlossen worden) habe ich mich entschlossen, nicht mehr mit register_globals=on leben zu wollen.

Viele Provider bieten noch immer das etwas ältere PHP4 an, und da register_globals hier standardmäßig eingeschaltet ist und viele Programme mit der Erwartung dieser Einstellung geschrieben worden sind, ändern dass die Provider auch nicht. Die Situation wird selbst für Wissende nicht besser, da es bei vielen Providern aufgrund ihrer PHP-Apache Einbindung und sonstiger Konfigurationsdetails nicht möglich ist, dies auf einer per-Account-Basis zu ändern. So auch bei 1&1.

Doch über Umwege geht es bei 1&1 dann doch. Dieser Umweg, heißt PHP5 – wo register_globals standardmäßig ausgeschaltet ist! Bei 1&1 sind sowohl PHP4 wie auch PHP5 installiert, das erste führt Dateien aus die die .php Endung haben, das zweite wird bei der .php5 Endung aktiviert. Also: man ändere das Dateiendungsmapping von Apache, und schon wird alles vom wesentlich sichereren PHP5 ausgeführt.

Wie? Ganz einfach: in das Hauptverzeichnis eine .htaccess-Datei mit folgender Zeile:

AddType x-mapp-php5 .php

Natürlich bringt diese Veränderung die Gefahr mit sich, dass manche ältere Skripte nicht einwandfrei laufen, denn für PHP4 geschriebener Code ist nicht notwendigerweise aufwärtskompatibel zur Version 5 des Parsers. Ich selbst stieß aber bei den neusten Versionen von WordPress, b2evo, Gallery, phpBB und Joomla auf keine Probleme. Nur ein selbstgeschriebenes Progi mußte um zwei Anführungszeichen ergänzt werden. Das ist gewiss nicht zu viel Arbeit, um 95% aller Angriffe abzuwehren und beruhigt schlafen zu können.


4 responses to “Safety First! register_globals=off”

  1. Hi Ben,

    danke für den Tipp und gleichzeitig auch für den Fix 🙂 Es gibt aber auch eine weitere Möglichkeit (steht in den FAQs von 1&1 ein wenig versteckt):

    Du kannst sehr wohl eine eigene php.ini Datei anlegen. Diese wird (da PHP als CGI ausgeführt wird) bei jedem Skript ausgewertet. Allerdings gilt die, im Gegensatz zu .htaccess, nur in dem Verzeichnis wo sie auch liegt, nicht auch in allen Unterverzeichnissen.

    Man könnte also, falls man register_globals doch mal einschalten will, im entsprechenden Verzeichnis eine php.ini Datei anlegen und das nur für dieses Verzeichnis wieder einschalten.

    Das geht natürlich nicht nur mit register_globals, sondern auch mit vielen anderen PHP-Settings.

  2. Apropos 1 & 1…

    Wer gerne mit PHP Skripten oder fertiger Software (z.B. Joomla) arbeitet, den dürfte sicherlich folgender Tipp von Ben interessieren, der beschreibt, wie man die Option register_globals zur Sicherheit abschalten kann.

    ……

  3. An sich ne gute Sache, ich frag mich nur, ob das auch dauerhaft brauchbar bleibt.
    Weihnachtsmann Köln