[PHP/mySQL] register_globalls

bigtail

kennt sich schon aus
register_globalls

Hi,

Warum ist eigentlich register_globalls=ON so unsicher??
Ich habe auch in PHP-Manuall nachgeschaut und nicht wirklich schlauer geworden.
Nun hat es mir jemand wie folgt erklärt:

Bisher war es so:
Du hast ein Formularfeld mit Name="vorname", das Feld wurde beim Senden an z.Bsp. action="formular.php" übergeben und war da als $vorname verfügbar. Es konnte aber nicht sichergestellt werden das es sich bei dem Wert auch wirklich um die Variable aus dem Formular handelt, wenn jemand den entsprechenden Feldnamen herausfindet kann der auch einen beliebigen Wert übergeben, das kann bei u.U. ganze Datenbanken löschen etc.

Jetzt ist es so:
PHP weiss nun in einen solchen Fall, das der Wert von Vorname nur unter der PHP-internen Variablen $_POST["vorname"] gespeichert sein darf. Das stellt sicher dass es sich auch um den gesendeten Wert handelt.

Aber wenn jemand den Wert für $Vorname manipulieren kann, warum soll er den Wert von $_POS['Vorname'] nicht manipulieren können??

Kann mir bitte jemand etwas genauer (Vielleicht an Hand eines Beispieles) das erklären??


Danke
 
Sauber programmiert ist register_globals so sicher und unsicher wie das Arbeiten mit $_GET, $_POST, etc. Das heißt JEDE Variable die mal im Skript verwendt wird muss initialisiert werden, also am Anfang des Skriptes einen Wert zugewiesen bekommen.

z.B. $temp = "";

Ist dies nicht der Fall können per GET oder POST auch Variablen geändert werden die in keinem Formular vorkommen. Wird z.B. irgendwo nur per if-bedingung eine Variable gesetzt (z.B. User eingeloggt) und diese später abgefragt kann ich ohne dass die Bedingung erfüllt ist einfach ein ?usereingeloggt=true an die URL anhängen und schon bin ich drin. :D
Hätte ich sie am Anfang des Skriptes gleich mit $usereingeloggt=false initialisiert gäbe es das Problem nicht.

Ein weiterer Vorteil der Servervariablen ist, dass ich zwischen Get, Post, etc. unterscheiden kann, während es bei den globalen alles sein könnte.
 
Oben