PHP: Unterschied $_POST, $_GET und der Sicherheitsaspekt

Wenn man effizient mit PHP programmieren möchte, kommt man nicht daran herum Daten oder Parameter an andere, oder sogar das gleiche Script zu übergeben. Nun stellt sich die Frage wie man das am besten bewerkstelligt. PHP gibt uns die Möglichkeit Daten auf mindestens zwei Arten zu übergeben: „POST“ und „GET“.

GET:

Benutzen wir „GET“, werden die zu übergebenen Daten in der Adresszeile hinter dem Verzeichnis und gefolgt von einem „?“ übergeben. Mehrere Übergabewerte werden mit einem „&“ Zeichen getrennt.

Beispiel:

http://www.martinrein.de/verzeichnis/index.php?wert1=inhalt&wert2=zahl

Die übergebenen Daten finden wir dann im globalen Array „$_GET[‚uebergabewert1‘]“ wieder und können diese abrufen und weiterverarbeiten.

POST:

Nutzen wir jedoch „POST“, werden die Daten für den Anwender (ohne weiteres) unsichtbar übertragen. Hierbei können vom Empfänger Script die Daten über das globale Array „$_GET[‚uebergabewert1‘]“ genutzt werden. Bei dieser Variante kann man direkt zwei wichtige Vorteile erkennen:

1. User können die Inhalte der übertragenen Arrayelemente (ohne weiteres) nicht manipulieren, wie es bei der „GET“ Methode möglich ist.
2. Würde man z.B. Usereingaben wie Passwort und Benutzername bei einem Login Script per „GET“ übergeben, sind diese Daten für alle die um den User herumstehen oder vorbeigehen einsehbar.

Fazit

Benutzerbezogene Daten oder Daten die stark in der inneren Funktion des Scripts gebunden sind, sollte man immer per „POST“ übertragen um Sicherheitslücken zu füllen und um wichtige Daten geheim zu halten

Generell, sollte man immer die „POST“ Methode verwenden und nur wenn es nicht anders geht, die „GET“ Methode verwenden.

Florian hat mich darauf Aufmerksam gemacht, dass natürlich nicht alle Daten per „POST“ übertragen werden sollten, z.B. Daten die für Bookmarks wichtig sind oder z.B. Daten die auf den Inhalt von einem Newsbeitrag hinweisen wie Beispielsweise der Titel der News.