PHP/MySQL - register_globals - Überblick
1. Die Abschnitte
- Überblick
- Die alte Variante
- "Superglobale" Arrays
- Lösungen
2. Aber das funzt net
Diesen Spruch kann man in den einschlägigen Foren immer wieder von leidgeprüften Anfängern hören. In vielen Fällen geht es einfach
nur darum, dass man angeblich keinen Zugriff auf GET
-Parameter, Formularinhalte oder Sessions hat. Dieses Problem ist
zwar mittlerweile schon gefühlte tausend Jahre alt, taucht aber leider immer wieder auf. Darum führt euch die folgenden Erläuterungen
genau zu Gemüte, da erspart ihr euch viel Arbeit und Rumsucherei.
3. Die Wurzel allen Übels
PHP wurde ursprünglich als möglichst einfache Sprache entwickelt, die schnell zu erlernen sein sollte. Dabei haben es die Entwickler
anfangs wohl ein wenig übertrieben. So konnte man in der Version 3 problemlos auf GET
- oder POST
-Werte
zugreifen, indem man einfach den jeweiligen Namen nahm und davor ein $
-Zeichen knallte.
Leider führte das dazu, dass man höllisch aufpassen musste, um nicht aus Versehen irgendwelche Variablen zu überschreiben. Außerdem
ergaben sich dadurch riesige Sicherheitslücken, da böswillige Menschen zum Beispiel durch einfache Manipulation von
GET
-Parametern fürchterlichen Unfug treiben konnten.
4. Geltungsbereich
Dieses Problem existierte sowohl bei den schon erwähnten GET
- oder POST
-Werten als auch bei Session- oder
Cookie-Inhalten. Aus Gründen der Übersichtlichkeit (und auch der Faulheit) konzentriere ich mich hier ausschließlich auf die ersten
drei Möglichkeiten. Das Prinzip ist bei der letzten Variante aber praktisch identisch.
5. Die Änderung
Um die oben beschriebenen Probleme zu beseitigen, wurde bereits mit PHP 4.0.1 eine neue Art der Behandlung eingeführt. Da es aber damals noch Scripte zu hauf gab, die auf der Version 3.x basierten, nahmen die Entwickler Rücksicht auf all die Betroffenen und beließen es in der Standardkonfiguration von PHP wie gehabt. Erst mit dem Erscheinen von PHP 4.2 wurde diese Änderung zum Standard.
6. Des Rätsels Lösung
... liegt in einem klitzekleinen Eintrag in der Konfigurationsdatei namens php.ini
und nennt sich
register_globals
. Steht dort der Wert auf On
, so behält die alte PHP3-Variante ihre Gültigkeit, bei
einem Off
dagegen muss man sich an den neuen Standard halten.
7. Höhlenmalereien und Faustkeile
Leider hat es sehr lange gedauert, bis sich der neue Standard durchsetzen konnte. Daher wimmelt es auch heutzutage im Internet immer noch von Tutorials und Einführungen zu PHP, die entweder aus der Steinzeit stammten oder von Bildungsresistenten zusammengehauen worden sind. Oder um uralten Code, der ebenfalls schon zig Jahre auf dem Buckel hat. Ich habe schon oft erlebt, dass in meinem Lieblingsforum immer wieder Anfänger sich Scripte gezogen und teilweise sogar dafür bezahlt haben, die auf dieser alten Variante basieren. Leider führt das dazu, dass viele immer noch aufs Glatteis geführt werden. Und sich die Moderatoren in den einschlägigen Foren ebenfalls noch damit rumärgern müssen.
Wichtig!
Hütet euch aber davor, auf eurem lokalen Testsystem aus lauter Faulheit einfach den Eintrag auf On
zu setzen.
Spätestens wenn ihr eure Dateien auf den Server eines Providers hochladet, ist eigentlich immer hängen im Schacht. Sollte der trotzdem
noch die alte Konfiguration haben, so gebe ich euch einen dringenden Rat. Sucht euch einen anderen!
8. Die folgenden Abschnitte
Als erstes werde ich euch (nur) aus Anschauungsgründen die alte Variante zeigen, damit ihr wisst, um was es geht und wo der Hase im Pfeffer liegt. Danach zeige ich euch, wie man mit den so genannten "superglobalen" Arrays arbeitet und auf was ihr dabei achten müsst. Beim letzten Punkt geht es darum, wie man alten Code entsprechend anpassen kann, damit er auch bei der normalen Konfiguration funktioniert.