PHP-Variablen sind nicht bestanden! Das Problem register_globals

PHP FAQ.

Verwenden Sie keine Variable übergeben! Das Problem register_globals



Es ist okay. Die Daten in dem Skript übertragen. Einfache PHP hat keine Auswirkungen dieser Variablen bei jeder Einstellung. Finden Sie Ihre Daten in speziellen Arrays sein kann.

In all die alten Handbücher auf PHP geschrieben , dass die Zahlen aus den Formen erhalten, oder durch Referenz übergeben wird, wie folgt aus : script.php?peremennaya=znachenie&variable=value
automatisch macht Variablen , die die PHP, $peremennaya als $variable
Diese Informationen sind veraltet.
Beruf, die aus Gründen der Sicherheit, beginnend mit Version 4.1, PHP standardmäßig so konfiguriert ist, dass die übertragenen Werte nicht einer Variablen zugewiesen.
Werde kann der übergebene Wert auf einen geeigneten Array angesprochen werden.
Zum Beispiel:
Wenn Sie mit dem GET übergeben, auf dem Verbindungstyp auf das Skript bezieht
script.php?var=value
oder durch Absenden des Formulars in seiner Methode, um anzuzeigen = "GET",
dann werden alle Variablen in einem Array $_GET .
echo $_GET [ 'var' ] ; print " value ".
Wenn Sie die Daten aus den Formularen von einem POST, werden alle Felder in dieser Form gesendet erwerben sind im Array enthalten sind $_POST . Angenommen, es war ein Element in Form von
.
etwas im Skript, das in Form von Aktion angegeben ist, können wir das Echo schreiben $_POST [ 'var' ]; $_POST [ 'var' ]; Es wird auch 1 angezeigt.

Deshalb, wenn Sie sicher sind, dass die Variable ist da, aber man kann es nicht finden - denn es in den Superglobals aussehen.
Weitere Details über sie können in russischer Sprache in offiziellen Dokumentation geehrt.
Die gleichen Noten und Servervariablen wie $REMOTE_ADDR , $PHP_SELF . Sie können sie durch Kontaktaufnahme mit dem Array erhalten $_SERVER , $_ENV oder Funktion getenv -
getenv ( 'HTTP_REFERER' )
getenv -
getenv ( 'HTTP_REFERER' )
;

Variablen in der Session registriert, um im Array gefunden werden $_SESSION .
Diese Cookies enthalten im Array $ _COOKIE, Informationen über hochgeladene Dateien - in $ _FILES
Umgebungsvariablen - im $ _ENV, sondern auch, gibt es eine Reihe von $ _REQUEST, die die Daten von GET, POST und Cookie gesammelt.

Wichtig! Ganz für Variablen sucht unterstützt eine der ersten PHP - Funktionen - phpinfo () phpinfo ()
es sollte jedes Mal verwendet werden, zu welcher Zeit Sie "verloren" Variable, Call phpinfo ( 32 ); phpinfo ( 32 ); in dem Skript, das funktioniert nicht auf das Skript , das die Datei mit Datei - Uploads nimmt - wie alle da!

Für die Zwecke der Variablen gibt die Antwort Option register_globals in der php.ini.
Wenn register_globals = on, werden alle Daten , die durch die auf die entsprechenden Variablen zugewiesen Skript empfangen werden.
PHP - Entwickler empfehlen dringend auszuschalten register_globals (ein solches Regime selbst eingegeben standardmäßig in allen neuen Versionen) verwenden , um die von dem Benutzer gewonnenen Daten nur zu den ent- Arrays verweisen.
Dies liegt daran , wenn register_globals auf leicht = etwas zu hacken wie ein Skript zu schreiben.
Die Probe, belichtet die Autorisierungsfunktion die Variable $admin = 1 , aber wenn Genehmigung nichts zu tun hatte, ist es nicht etwas bewirken. Dieses Skript , wenn register_globals = on ist sehr einfach , der Administrator zu werden , indem einfach darauf zu verweisen script.php?admin=1
Ogoromnoe Anzahl der Standorte wurden auf diese Weise gehackt.

Darüber hinaus register_globals = nutzt superglobalnmi Arrays (off $_GET , $_POST und so weiter), die Unterstützung um Verwirrung zu vermeiden bietet. Sehr viele Menschen, eine bestimmte Variable in der Sitzung zu schreiben, aber dann seinen Wert versucht zu ändern, ist es für das Skript von GET zu übertragen, können kontinuierlich nicht verstehen, warum sie nichts hatte nicht funktioniert? deshalb
sehr wichtig , mit Sitzungen bei der Arbeit, bei allen Einstellungen (und vor allem - wenn register_globals ! = on) nur mit dem Array zu arbeiten $_SESSION , wie beschrieben in dem entsprechenden Abschnitt .

Das heißt, register_globals = off - an der Lektion kein Ziel, sondern ein Mittel. Anreize zur Sicherung der Programmierer Skripte geschrieben und Verwirrung entziehen.
Wenn Sie ein Skript schreiben wollen , die nicht von der Einstellung abhängt , register_globals und damit geschützt - müssen Sie Variablen zu deklarieren , bevor Sie. Zu diesem Zweck eine weitere Initiative, PHP-Entwicklung - Programme auf der Ebene der Fehlerzuordnung (error_reporting) gleich E_ALL schreiben, für die die Verwendung von nicht deklarierten Variablen Warnungen ausgegeben.
Es war die Ankündigung aller Variablen im Skript verwendet als yavlyaets Schutz vor Manipulation. Wenn Sie ein Programm schreiben zu verbreiten, ist die Garantie für seine Sicherheit nur eine Deklaration von Variablen.

Wenn es nicht möglich ist , das Drehbuch fertig zu wiederholen, aber es braucht , um zu arbeiten , register_globals = off, müssen wir nicht , dass an erster Stelle vergessen, Sie auf Ihrer Website ein potenzielles Loch, aber zweitens dafür können Sie mit dem extract auch import_request_variables

ABER!
Thoughtless Nutzung dieser Funktionen ist ebenso riskant!

Wenn Sie die alte Schrift nach den neuen Bestimmungen anpassen wollen, dann folgen Sie den obigen Code in dieser Routine!
import_request_variables ( "GPC" );
extract ( $_SERVER );
Erstbestellung Variablen vom Benutzer kommen, aber dann - vordefinierten Server, der die erste nicht den gleichen Namen-Server überschreiben könnte.
WICHTIG !!!
Dieser Code muss so früh wie möglich im Skript aufgerufen werden. Bevor irgendwelche Code und Zuweisen von Variablen.
Da es ein Loch ist pohlesche register_globals = on!
später Variablen Nach allem, wenn er im Skript aufgerufen wird, zuweisen, dann kann der Hacker leicht überschrieben werden.
Die neuesten Versionen von PHP sagen Sie diesen notaysom mit import_request_variables.
, Es ist wahr - Drei Jahre sind seitdem vergangen, da die neuen Regeln eingeführt. Es ist Zeit, auch richtig zu kritzeln Skripten lernen.

Aber es ist besser, nicht in zu Fuß Variable abgeladen zu verwenden, aber die jeweiligen Arrays. Vor allem, wenn eine der Variablen des Skripts gefunden Koch, aus der Form der Sitzung - ziemlich viel Verwirrung aus dieser stammt.

Wenn Sie neu auf dieser Seite sind, dann ist es dringend alle Themen zu sehen , zu empfehlen. Es braucht nicht viel von Poren nehmen, aber die Fragen, dann leuchtet, können Sie nicht eines Tages treffen können , wenn sie in PHP - Programmierung
von phpfaq.ru