Frage

Ich habe einen Teil des alten PHP-Codes geerbt, der zurückgeschrieben wurde, als es üblich war, ihn zu verwenden register_globals (Ab PHP 4.2.0 ist diese Direktive standardmäßig auf „off“ eingestellt, veröffentlicht am 22.April 2002).

Wir wissen jetzt, dass es sich negativ auf die Sicherheit auswirkt, wenn es aktiviert ist.Das Problem ist, wie ich alle Stellen im Code finde, die ich verwenden muss $_GET oder $_POST?Mein einziger Gedanke war, die Fehlerberichterstattung so einzustellen, dass sie vor nicht initialisierten Variablen warnt, und dann jeden Teil der Site zu testen.Gibt es einen einfacheren Weg?Muss ich jeden Codepfad auf der Site testen oder gibt PHP eine Warnung auf Dateibasis aus?

War es hilfreich?

Lösung

Wenn Sie die Fehlerberichterstattung auf E_ALL setzen, werden im Fehlerprotokoll Warnungen vor undefinierten Variablen mit Dateinamen und Zeilennummer angezeigt (vorausgesetzt, Sie protokollieren in einer Datei).Es wird jedoch nur gewarnt, wenn es auf eine undefinierte Variable stößt. Daher denke ich, dass Sie jeden Codepfad testen müssen.Das Ausführen von PHP über die Befehlszeile scheint ebenfalls nicht zu helfen.

Es gibt ein Debugging-Tool namens xdebug. Ich habe es noch nicht ausprobiert, aber vielleicht kann das nützlich sein?

Andere Tipps

Ich habe ein geschrieben Skript mit dem eingebauten Tokenizer Funktionen.Es ist ziemlich grob, aber es hat für die Codebasis funktioniert, an der ich gearbeitet habe.Ich glaube, Sie könnten es auch verwenden CodeSniffer.

Sie könnten den Register-Globals-Effekt manuell „fälschen“, aber etwas Sicherheit hinzufügen.(Ich habe dies teilweise von der osCommerce-Abzweigung namens xoops übernommen)

//  Detect bad global variables
$bad_global_list = array('GLOBALS', '_SESSION', 'HTTP_SESSION_VARS', '_GET', 'HTTP_GET_VARS', '_POST', 'HTTP_POST_VARS', '_COOKIE', 'HTTP_COOKIE_VARS', '_REQUEST', '_SERVER', 'HTTP_SERVER_VARS', '_ENV', 'HTTP_ENV_VARS', '_FILES', 'HTTP_POST_FILES');
foreach ($bad_global_list as $bad_global ) {
    if ( isset( $_REQUEST[$bad_global] ) ) {
        die('Bad Global');
    }
}

//  Make global variables
foreach ($_REQUEST as $name -> $value) {
    $$name = $value; // Creates a varable nammed $name equal to $value.
}

Allerdings möchten Sie es optimieren, um Ihren Code sicherer zu machen, indem Sie zumindest Ihre globalen Konfigurationsvariablen (wie den Pfad und die Basis-URL) zur Liste der fehlerhaften Globals hinzufügen.

Sie können damit auch ganz einfach eine Liste aller verwendeten get/post-Variablen erstellen, um schließlich alle Vorkommen von beispielsweise $return_url durch $_REQUEST['return_url] zu ersetzen;

Ich weiß, dass es eine Möglichkeit gibt, php.ini-Werte für dieses Skript mit einem bestimmten Befehl festzulegen. Deshalb habe ich gesucht und auch Folgendes gefunden: Gehe zum letzten Beitrag auf Seite

Ich habe auch den folgenden Beitrag gefunden, der vielleicht von Nutzen sein könnte: Gehe zum letzten Beitrag auf der Seite

Ich werde noch etwas hinzufügen, falls niemand eine Antwort gefunden hat, aber ich muss jetzt einen Zug nehmen.

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