phpbar.de logo

Mailinglisten-Archive

[php] Re: unterschiedliche methoden -> selbes resultat... warum?

[php] Re: unterschiedliche methoden -> selbes resultat... warum?

Nicolas Neubauer nn__(at)_gmx.net
Mon, 11 Dec 2000 03:07:50 +0100


Hallo Andy,

> hab mal 2 - für die meisten unter euch - vermutlichvermutlich triviale fragen:
> 
> 1) wenn ich eine variable (z.b. <input type=text name=alter> )aus einem
> formular via post oder get übergebe, kann ich auf der nächsten seite via
> http_post_vars bzw http_get_vars auf die variablen zugreifen. allerdings
> funktioniert es dort ja auch, wenn ich direkt auf die variable zugreife
> (z.b. echo $alter;) ... was ist dabei er unterschied? ist es "sicherer" den
> umweg über http_****_vars zu gehen, oder gibts einen bestimmten grund das
> auf die eine oder andere weise zu tun?
> 
> 2) ähnliches gilt ja auch für variablen wie $HTTP_REFERER,
> $HTTP_USER_AGENT, .... die kann ich entweder direkt ansprechen (z.b. echo
> $HTTP_USER_AGENT;) oder über den gefehl getenv (oder so ähnlich). welche
> variante sollte man da wählen... und warum?

PHPs Angwohnheit, POST-, GET-, etc Variablen direkt auf gleichnamige
globale Variablen zu mappen, ist so eins *der* Features (zusammen mit
der Möglichkeit, Code und Layout zu vermischen.. ;), die PHP am Anfang
so schön einfach machen, und alles geht so schnell.. und die einem dann
irgendwann die Tränen in die Augen treiben, wenn man sich später noch
einmal seinen Code anguckt. Meine Empfehlung wäre also , die
$HTTP_*_VARS bzw. getenv() zu benutzen. 

Aus zwei Gründen:
Erstens möchtest Du vielleicht eines Tages wissen, was diese Variable da
eigentlich macht bzw. wo sie herkommt, und wenn Du die Arrays benutzt,
steht es direkt vor Dir (klingt trivial, ist aber tatsächlich manchmal
ungemein praktisch), und überhaupt ist es eigentlich guter Stil,
möglichst wenig globale Variablen zu haben.
Zweitens und wohl entscheidener: Es ist sicherer. Du hast ja sonst gar
keinen Überblick, woher die Variable kommt, Du gehst halt davon aus,
dass Du es bspw. mit einer POST-Variable zu tun hast, weil Dein Programm
normalerweise so funktioniert; unter Umständen hat der Benutzer Deine
Seite aber ganz anderes aufgerufen und übergibt Werte, mit denen Du nie
gerechnet hättest.. nicht dass man andernfalls den Variablen erheblich
grösseres Vertrauen entgegenbringen sollte, aber wenn Du ein Formular
auswerten willst und sich der Aufruf nicht mal eben durch eine
entsprechende URL mit gefakten Queries simulieren lässt, hast Du
vielleicht bei der Gelegenheit schon mal einen Querschläger abgefangen.

Nicht umsonst ist dieses Feature (register_globals) bei PHP4 (zumindest
in der optimierten Version der php.ini) by default ausgeschaltet. 

Wenn Du übrigens Deine POST-Variablen dennoch direkt ansprechen
möchtest, kannst Du immer noch hingehen und was in der Art
while (list($name, $wert)=each($HTTP_POST_VARS)) $name=$wert;
sagen, dann hast Du den gleichen Komfort und trotzdem schonmal
sichergestellt, dass das, was Du für gepostet hältst, auch tatsächlich
gepostet wurde.

Viele Grüße,
Nicolas Neubauer


php::bar PHP Wiki   -   Listenarchive