Überprüfung von globalen Variablen

xtratz

Gesperrt
Hallo Leute,

ich möchte gerne ein sehr großes Script das vor Jahren Programmiert wurde register_globals=off tauglich machen.

Jetzt meine Frage: Gibt es eine Möglichkeit ala error_reporting(E_ALL); Variablen eines Scriptes ausgeben zu lassen, welche mit der Einstellung register_globals= off, nicht laufen würden?

Gruss
 
Du müsstest einfach sämtliche Variablen die von außen kommen (also durch URL oder Formulare, bzw. Sessions und Cookies) umändern und in die entsprechenden Superglobalen eintragen.

Eine genauso unsichere Lösung (aber eindeutig schneller und einfacher) ist natürlich [phpf]extract[/phpf].
 
Danke Dir!
Das ich die Variablen abändern muss ist mir bewusst.
Aber ich hätte gedacht das es eine Möglichkeit gibt eine Art Fehleraugabe anzeigen zu lassen um zu prüfen ob z.b. Variablen wie $eine_variable gültig sind.

Das Problem ist eher das an manchen stellen das Script nicht funktioniert wenn register_globals off ist.

Dies liegt sicher an den globalen Variablen. Und ich suche eine einfache Möglichkeit mir diese in einer Übersicht oder Ausgabe Anzeigen zu lassen. Denn das Script ist über ca. 300 Seiten verteilt und hat sehr viel Code!

Gibt es da nix?

Gruss
 
Hm, es gibt die Variable $GLOBALS, die alle Variablen die gesetzt sind beinhaltet.

Ganz unten werden in der Regel alle lokal gesetzten Variablen aufgezählt.

Eventuell könntest du da einen Vergleich mit den Variablen machen, die durch $_POST bzw. $_GET u. ä. kommt mit denen im Skript gesetzten.
 
Eben das ist ja das Problem.

Es existieren globale Variablen die eigentlich per $_GET oder $_POST definiert werden.

Richtig: $_POST['beispiel'] und bei mir Falsch: $beispiel.....

Wenn ich nun eine Möglichkeit hätte mir alle globalen Variablen ausgeben zu lassen könnte ich gezielt vorgehen und diese Überprüfen.

Wenn ich jedoch das Script Zeile für Zeile nach diesen durchsuchen muss dann sitze ich in 100 Jahren noch drann ;-/.

Könntest Du mir ein kleines Beispiel geben wie Du das lösen würdest?

Das wäre echt nett und ich google derweilen weiter ;-)

Gruss
 
Viel Arbeit wird es so oder so sein...

Ich würde mir auf sämtlichen Seiten $_GET und $_POST ausgeben lassen, diese dann in PHP überprüfen und rein damit...
Wobei die Überprüfung natürlich vom Inhalt der Variablen abhängt und was damit getan werden soll...

Code:
# Nehmen wir mal an, ein Formular sendet uns eine Nachtricht per $_POST['message']
# im alten Skript steht überall nur $message
$message = ( isset($_POST['message'] && !empty($_POST['message']) ? $_POST['message'] : '' );

# In der URL wird eine ID übergeben, die nur aus Zahlen besteht
$id = ( isset($_GET['id']) ? intval($_GET['id'] : '' );

Für Strings sollte natürlich weitere Bearbeitung sein, z. B. [phpf]htmlspecialchars[/phpf] und beim Eintragen in die Datenbank auch [phpf]mysql_real_escape_string[/phpf].
 
Jo aber das Problem ist wie gesagt nicht das abändern sondern das finden dieser, im prinzip ungültigen Variablen.

Muss ich wirklich 300 Seiten Quellcode durchgehen und die suchen?

Beispiel:

if (isset($demo)) echo 'hallo';

Das wird mit register_globals off nicht mehr funktionieren. Weil zum einen $demo nicht explizit definiert ist und selbst wenn $demo in der Browserzeile übergeben wird, wird es auch nicht funktionieren.

Mit error_reporting erhalte ich lediglich eine Warnung wenn es so ausschaut:

if ($demo) echo hallo;

Beides ist aber unsicher!

So! Das Problem ist wie gesagt nicht das abändern sondern das auffinden dieser Variablen.

Gibt es nicht eine Funktion die mir nun $demo und alle anderen VAriablen ausgibt die ungültig sind?

error_reporting ist ja schon eine Variante aber leider nicht ganz das was ich brauche.
 
Zurück