PHP: Formularvariablen

Status
Not open for further replies.

Jobra

Registered User
Hallo,

mich würde mal interessieren, ab welcher Version die Variablen aus Formularen (GET oder POST) nicht mehr in normale Variablen umgewandelt werden.
In alten Versionen konnte ja z.B. ein Formularfeld mit dem Namen 'feld' im PHP-Script mit der Variablen $feld ausgegeben werden. In neueren versionen ist dies nur noch mit $_POST[feld] bzw. $_GET[feld] möglich.

Ich hab nämlich folgendes Problem:
Als ich angefangen hab mit PHP hab ich nicht wirklich viel Wert auf Sicherheit gelegt und hab darum einfacherweise die normalen Variablen in der Scripten verwendet. Nun bin ich auf einen anderen Server umgezogen und es kommt zu Fehlern, da diese Variablen nun nicht mehr Funktionieren. Ich werde vermutlich alle Scripte nocheinmal überarbeiten müssen.

Meine Frage also: Ab welcher Version stehen die 'normalen' Variablen nicht mehr zur Verfügung, bzw kann man das irgendwo einstellen?

MfG Jonas
 
Jobra said:
mich würde mal interessieren, ab welcher Version die Variablen aus Formularen (GET oder POST) nicht mehr in normale Variablen umgewandelt werden.
In alten Versionen konnte ja z.B. ein Formularfeld mit dem Namen 'feld' im PHP-Script mit der Variablen $feld ausgegeben werden. In neueren versionen ist dies nur noch mit $_POST[feld] bzw. $_GET[feld] möglich.
Das hat nichts (oder nicht viel) mit der PHP-Version zu tun, eher mit der PHP-Option register_globals. Falls die an ist, werden GPC-Variablen direkt verfügbar gemacht, andernfalls nicht. Zum einen ist, wenn dieses Option aktiv ist, die Performance minimal schlechter, zum anderen kann es bei schlecht programmierten Scripts zu Sicherheitsproblemen führen.
(Bsp.:
PHP:
$d = mysql_fetch_assoc(mysql_query('SELECT `admin` FROM `foo`'));
if ($d['admin'] == 1) $admin = true;
// [...]
if ($admin) mach_sicherheitsrelevanten_kram();
Da die Variable $admin nur unter bestimmten Umständen initialisiert wurde, könnte man mit ?admin=true sich einfach Admin-Zugriff verschaffen. Das nur als Beispiel...
Davon abgesehen ist die Syntax
$_GET[feld] strenggenommen falsch: feld würde korrekterweise als Konstante interpretiert (was du mit hoher Wahrscheinlichkeit nicht bezwecken willst). Da PHP aber sehr fehlertollerant ist, 'denkt' es mit, und vermutet, dass du einen String meintest. Das wird dir PHP bei einem Notice-Error-Level auch sagen.
Korrekt wäre: $_GET['feld'] oder $_GET["feld"].
 
Danke hoffie für die Erklärung.

Ich hab die Funktion in der php.ini eingeschaltet und die Scripte laufen nun wieder. Über das Sicherheitsrisiki bin ich mir bewusst und mache es wie gesagt auch schon länger richtig, ich hab die alten Scripte nur noch nicht geändert.
Das mit der Konstante wusste ich noch garnicht und werde es mir merken.

Das Thema sollte damit erledigt sein und kann geschlossen werden.
 
Status
Not open for further replies.
Back
Top