$_POST und $_GET
in HTML lassen sich Formulardaten auf zwei verschiedener Art versenden:
- GET
- POST
Das hat Vor- aber auch Nachteile:
Bei der Möglichkeit via GET werden die dabei werden die Variablennamen und deren Inhalt in der Adressleiste des Browsers übertragen.
Im allgemeinen ist es besser die Daten via GET zu übertragen. Das hat zB den Vorteil, dass man einen link incl. der ggf. notwendigen Parameter weitergeben kann. Es ist auch einfacher Formulare zu debuggen, da man ja den übertragenen Inhalt leicht einsehen kann.
Genau hier liegt aber auch eine Problematik, nämlich dann, wenn Daten übertragen werden sollen, die nicht in den log-files irgendwelcher an der Übertragung der Seite beteiligten Rechner auftauchen sollen. Dazu gehören zum Beispiel Passwörter!
Dann ist die Methode über POST notwendig! Immer dann, wenn die Länge von Eingabeelementen nicht nach oben begrenzt ist muss POST genutzt werden, das ist zB dann der Fall, wenn man einen file_upload mit PHP macht, oder wenn man in einem Formular TEXTAREA nutzt.
Welche Methode man nun benutzt hängt also im individuellen Fall ab.
Die Benutzung der beiden Varianten ist jedoch vom Prinzip her gleich
PHP-Code:
01
02
03
04
<?php
echo $_POST['variablenname'];
echo $_GET['variablenname'];
?>
Da ihr nun GET-Variablen, die in der URL stehen im Skript benutzen könnt, hier auch der Hinweis, dass an jeden normalen link Parameter angehängt werden können.
Nach dem Dateinamen kommt ein ?
Code:
index.php?variable=wert
Mehrere Variablen werden mit & getrennt.
Code:
index.php?variable=wert&und=noch&eine=variable
Im Quelltext selbst kann man nun damit wie mit normalen Variablen auch umgehen!
PHP-Code:
01
02
03
04
<?php
$var = $_GET['variablenname'];
echo 'ich war mal eine GET-Variable: '.$var;
?>
Das sind also ganz normale Variablen, nur dass sie vom Benutzer deklariert werden.
Das ist zu beachten, wenn es um das Thema Sicherheit geht. ALLES, was vom client beim Besuch der website geändert werden kann muss genauestens überprüft werden. Generell gilt hier die Herangehensweise: Jede Variable, die vom client geändert werden kann ist böse.
Es gilt also eine Überprüfung der Daten vorzunehmen, ob sie auch mit Sicherheit unschädlich sind, andernfalls drohen Gefahren. Es wäre möglich mit einer preparierten Variable zB die Datenbank zu löschen, diese einzusehen, zu verändern oder ... das hängt vom Skript ab!
register_globals
register_globals sollten auf OFF stehen. Leider gibt es noch hoster, die das standardmäßig auf ON haben, weil sonst einige Skripte nicht funktionieren würden.
Mit register_globals kann man einstellen, ob man GET, POST, COOKIE, SESSION, ... Variable direkt ansprechen kann.
Ihr habe zB eine Seite wie folgt aufgerufen:
index.php?id=test
Im Skript selbst sprecht ihr diese Variable nun mit $_GET['id'] an. Soweit so gut, aber wenn ihr zB dort im gleichen Skript eine Variable
$foo = 'blub';
definiert habt, dann könnte der Inhalt der Variable mit einem Seitenaufruf gefälscht werden:
index.php?id=test&foo=boese
register_globals stellt eine Sicherheitslücke dar.
Achtet daher also immer darauf, dass ihr register_globals deaktiviert habt, und die Variablen korrekt ansprecht.
Das macht aus das lesen des Codes bei der Fehlersuche wesentlich leichter!
Wie man die Einstellung register_globals überprüfen kann:
in einer Datei, die phpinfo(); als Inhalt hat (dazu siehe auch hier.)
Sollte der Wert auf ON stehen, so könnt ihr das mit der Einstellung
Code:
php_flag register_globals Off
in der .htaccess ändern.
Bei Problemen sonst auch den Hoster ansprechen, der euch sicherlich behilflich ist.