2008-09-19 9 views
9

diesen Code Nehmen erklärt werden:PHP: GET-Daten automatisch als Variablen

<?php 
if (isset($_POST['action']) && !empty($_POST['action'])) { 
    $action = $_POST['action']; 
} 

if ($action) { 
    echo $action; 
} 
else { 
    echo 'No variable'; 
} 
?> 

Und dann Zugriff auf die Datei mit action = Test Gibt es eine Möglichkeit $ Aktion zu verhindern, dass automatisch von der GET erklärt werden ? Anders als natürlich hinzufügen

&& !isset($_GET['action']) 

Warum sollte ich die Variable für mich deklariert werden?

Antwort

27

Überprüfen Sie Ihre php.ini für die register_globals Einstellung. Es ist wahrscheinlich an, du willst es aus.

Warum sollte ich die Variable für mich deklariert werden?

You don't. Es ist ein schreckliches Sicherheitsrisiko. Es macht die Variablen Environment, GET, POST, Cookie und Server global (PHP manual). Dies sind eine Handvoll reserved variables in PHP.

+0

Vielen Dank für die Antwort, es ist wirklich, was ich gesucht habe. Aber ist mein Beispiel das einzige, was register_globals betrifft? – Eikern

+0

Ich habe ein bisschen mehr in der Antwort oben gepostet - es betrifft die Umgebung, Get, Post, Cookie und Server. – owenmarshall

4

Sieht aus wie register_globals in Ihrem php.ini ist der Schuldige. Sie sollten dies ausschalten. Es ist auch ein großes Sicherheitsrisiko, es zu haben.

Wenn Sie Shared Hosting verwenden und php.ini nicht ändern können, können Sie ini_set() verwenden, um register_globals auszuschalten.

1

Sie testen können, ob alle Variablen durch Drehen des PHP-Log-Level in der php.ini

error_reporting = E_ALL 

Ihr Code-Snippet ordnungsgemäß deklariert werden sollten nun eine BEKANNTMACHUNG erzeugen.

1

Irgendwann in der Geschichte von php machten sie die umstrittene Entscheidung, register_globals standardmäßig zu deaktivieren, da dies ein großes Sicherheitsrisiko darstellte. Es gibt jedem das Potenzial, Variablen in Ihren Code zu injizieren, unvorstellbare Konsequenzen zu erzeugen! Dieses "Feature" ist sogar in php6

entfernt. Wenn Sie bemerken, dass es eingeschaltet ist, wenden Sie sich an Ihren Administrator, um es auszuschalten.

2

, wenn Sie keinen Zugriff auf die php.ini , ein ini_set('register_globals', false) im PHP-Skript wird nicht funktionieren (Variablen bereits deklariert) Einem .htacces s mit:

php_flag register_globals Off 

kann manchmal helfen.