PHP-Skripte finden, die register_globals benötigen

8

Ich habe einen Webserver geerbt, der mit Code gefüllt ist, für den register_globals aktiviert sein muss. Das meiste davon ist benutzerdefinierter Code, geschrieben von zufälligen Leuten, die im Laufe der Jahre gekommen und gegangen sind. Ich habe den Großteil davon in Skripten, die ich kenne, behoben, aber mein Problem besteht darin, diejenigen zu finden, von denen ich nichts weiß.

Ich überlege mir, eine Anwendung zu schreiben, die jedes Verzeichnis auf dem Webserver durchsucht, um PHP-Skripte zu identifizieren, die register_globals benötigen. Gibt es dafür eine gute Strategie?

Eine Methode, die ich in Betracht gezogen habe, besteht darin, PHP irgendwie zu zwingen, alle Fehler zu melden, Skripte auszuführen und nach nicht definierten Variablen zu suchen. Ich könnte eine Anwendung erstellen, die dafür den Stream STDERR liest.

Gibt es bessere Methoden, die Sie sich vorstellen können?

    
Brad 03.02.2011, 18:37
quelle

5 Antworten

6

Die meisten IDEs zeigen Ihnen nicht definierte Variablen, PHPStorm zum Beispiel. Sie können alle Ihre Quelldateien scannen lassen, und Sie werden über nicht definierte Variablen in Ihrem gesamten Code informiert, während sie tatsächlich ausgeführt werden.

Dies ist wahrscheinlich die einfachste und schmerzloseste Variante. Alternativ könntest du natürlich dein eigenes Skript schreiben, indem du den Tokenizer benutzt und alle T_VARIABLE s identifizierst, die vorher nicht mit T_VARIABLE % initialisiert wurden. co_de% '=' Konstrukt. Aber das wird fehleranfälliger sein. Die Verwendung der IDE wird Ihnen wahrscheinlich bessere Ergebnisse mit weniger Aufwand bringen.

    
NikiC 03.02.2011, 18:44
quelle
3

Unter der Annahme, dass einzelne Dateien immer register_globals ein- oder ausschalten, können Sie eine Liste aller Formularelementnamen erstellen, die an ein Skript übergeben werden, und dieses Skript überprüfen, wenn $fieldname ohne $_REQUEST['fieldname'] (oder $_POST , $_GET Arrays).

Ihre "Check for Notices" -Methode wäre in Ordnung, wenn Sie bei diesen Überprüfungen eine sehr hohe Codeabdeckung garantieren können (um sicherzustellen, dass Sie nichts übersehen haben - die unbedeckten Teile müssen dann manuell überprüft werden).

>     
ThiefMaster 03.02.2011 18:40
quelle
2

Bei der Untersuchung Ihrer Protokolle auf Symptome von Skripten, in denen erwartet wird, dass globale vars hilfreich sein können, ist das Durchlesen des Codes die einzige Möglichkeit, dies wirklich zu tun. Wenn Sie dies automatisieren möchten, müssen Sie einen PHP-Interpreter erstellen oder auf ihn zurückgreifen. Sonst sind Sie dazu bestimmt, Dinge zu verpassen, die sich in Bedingungen, möglichen Verbesserungen usw. befinden.

    
coreyward 03.02.2011 18:42
quelle
1

Es gibt eine Möglichkeit, Verwendungen von register globals zu finden, bei denen es sich um Strings im laufenden Code handelt. Sie können das folgende Skript erstellen und die PHP auto_prepend_file Optionen verwenden Fügen Sie es Ihrem bestehenden Code voran.

%Vor%

Für Ganzzahlen usw. müssten Sie Ihr PHP patchern: Ссылка

    
sschueller 27.07.2015 07:00
quelle
1

Ich habe dieses Problem selbst in einer riesigen Codebase mit Tausenden von Dateien kennengelernt. Inspiriert von der von @sschueller veröffentlichten Lösung habe ich diesen auto_prepend_file-Code getestet, der Vorkommnisse zur Untersuchung protokolliert. Diese Methode sollte auch in Verbindung mit Parsing / Tokenizing verwendet werden, um alle Vorkommen zu erfassen.

%Vor%     
roktechie 06.09.2017 02:56
quelle

Tags und Links