Tipps & Tricks
Hilfestellungen rund um die Themen Internet & Programmierung
WAMP-Tutorial, Teil 9, Ergänzungen: Globale Variablen registrieren
Sie können nun noch einige optionale Einstellungen vornehmen, damit die Arbeit mit Ihrem WAMP noch komfortabler wird.
So übergeben Sie Werte ohne $_GET und $_POST
Wenn Sie Werte von Variablen zwischen zwei PHP-Script-Aufrufen übergeben möchten, können Sie das z.B. mit den sogenannten superglobalen Arrays $_GET und $_POST tun.
$_GET-Werte werden meistens über ein angehängtes Fragezeichen übertragen, z.B. so:
<a href="meinziel.php?meinevariable=meinwert">Mein Link</a>
$_POST-Werte kommen aus abgesendeten Formularen:
<form method="post" action="meinziel.php">
<input type="hidden" name="meinevariable" value="meinwert" />
</form>
Im ersten Fall steht Ihnen in Ihrem Ziel-Script der Wert der Variablen 'meinevariable' als Element des Arrays $_GET zur Verfügung, im zweiten Fall als Element von $_POST:
<?php echo $_GET['meinevariable']; // Ausgabe: meinwert ?>
<?php echo $_POST['meinevariable']; // Ausgabe: meinwert ?>
Wenn Ihnen das zu kompliziert ist, bietet PHP auch eine einfachere Möglichkeit: der Name der übergebenen Variable oder der Name des HTML-Formularfeldes steht Ihnen im Zielscript direkt als Variable zur Verfügung. Für beide oben aufgeführte Beispiele gilt:
<?php echo $meinevariable; // Ausgabe: meinwert ?>
Dieses Verhalten stellt allerdings eine Sicherheitslücke dar (siehe unten) und ist deshalb bei der Standard-PHP-Konfiguration ausgeschaltet. Sie können es manuell einschalten, indem Sie Ihre php.ini-Datei in Ihrem Windows-Ordner öffnen und nach folgendem Block suchen:
; Whether or not to register the EGPCS variables as global variables. You may
; want to turn this off if you don't want to clutter your scripts' global scope
; with user data. This makes most sense when coupled with track_vars - in which
; case you can access all of the GPC variables through the $HTTP_*_VARS[],
; variables.
;
; You should do your best to write your scripts so that they do not require
; register_globals to be on; Using form variables as globals can easily lead
; to possible security problems, if the code is not very well thought of.
register_globals = Off
Die betreffende Einstellung heisst "register_globals" und Sie müssen den Wert in der letzten Zeile von "Off" auf "On" stellen. Danach starten Sie den Apache neu.
Sicherheitsprobleme durch register_globals
Auf den ersten Blick mag diese Funktionalität von PHP eine große Erleichterung beim Schreiben von Scripten sein: man muss sich nicht so viele Gedanken darüber machen, wo die Variablen herkommen und kann schneller darauf zugreifen. Es kann aber auch zu großen Problemen führen, nämlich dann, wenn jemand versucht, eigenen Code in Ihre Scripte einzuschleusen. Und das geht jetzt viel einfacher:
Wenn Sie z.B. ein Formular verarbeiten, welches vom User abgeschickt wurde, könnte es für die Verarbeitung wichtig sein, dass die Variable $meinevariable wirklich aus einem (evtl. versteckten) Formular kommt. Ein User könnte nach dem Abschicken die übertragenen Daten manipulieren, indem er einfach in der Adresszeile seines Browsers ein Fragezeichen an die URL hängt und einen neuen Wert für eine Variable angibt. Sie müssten also auf andere Weise überprüfen, ob die Variable wirklich aus dem Formular kommt.
Von daher sollten Sie es gut überdenken, ob Sie nicht lieber die (geringe) zusätzliche Arbeit in Kauf nehmen und dafür sichereren Code schreiben. Davon abgesehen ist mit $_GET und $_POST geschriebener Code besser lesbar und strukturierter. Übrigens: Wenn Sie eine PHP-Version verwenden, die älter als 4.1.0 ist, müssen Sie die alten Arrays $HTTP_GET_VARS und $HTTP_POST_VARS benutzen.
Übrigens ist für PHP6 geplant, die Einstellung "register_globals" komplett fallen zu lassen. Dann können Sie entsprechende Variablen nur noch über $_GET und $_POST aufrufen. Bedenken Sie dies, wenn Sie langfristig lauffähige Scripte schreiben möchten.
