Hiho,
ja wenn ich on mach dann gehts warum soll ich sie nicht ändern?
Das hat zwei gründe, die voneinander abhängen. Erst einmal ist PHP gerade im umbruch und dabei dieses REGISTER GLOBALS abzuschaffen und du weisst nicht sicher wie lange diese Fubnktion noch in PHP sein wird. Wenn du also zukunftssichere scripte schreiben willst schreib sie so, das sie auch ohne REGISTER_GLOBALS laufen. Warum machen die bösen Leute von PHP das? Weil es REGISTER_GLOBALS sehr einfach macht unsichere Scripte zu schreiben. So kann ein User durch erraten einer Variable (oder durch Kentniss des Quellcodes) einfach in deinen Code eingtreifen und diesen zu Dingen bringen, die du nicht beabsichtigt hattest. Und sowas ist ziemlich schwer zu schliessen. Zwei kleine Beispiele:
Bsp A)
Stell dir vor du schreibst diesen Code (auch wenn der alles andere als gut ist, wird aber sicher öfters so verwendet)
do{
$write = fopen("datei_$i.txt", w);
fclose($write);
}while($i < 5);
Sieht doch auf den ersten Blick ganz vernünftig aus um 5 leere Textdateien zu erstellen, oder? Was passiert nun aber wenn ein besucher dieses in die Adressleiste tippt:
script.php?i=6
Genau, $i hat plötzlich den Wert 6 und die Abbruchbedingung ist unwahr. Das heisst plötzlich wird dein Script nicht mehr abbrechen und dir die ganze Festplatte mit Dateien zuschreiben
Bsp B)
Du hasst folgendes Script für einen Login:
if($pw == $pw_aus_db){
$eingeloggt = 1;
}
if($eingeloggt == 1){
lass_den_user_rein();
}
Auch das sieht auf den ersten blick nicht unvernünftig aus. Es sei denn jemand ruft dein Script mit script.php?eingeloggt=1 auf...
Und schon ist er ohne irgendwelche Passwörter eingeloggt.
Solche Beispiele gibt es tausendfach und ich bin mir sicher es gibt wenige Scripte die nicht irgendwo nen Angriffspunkt über diese Methode haben. Damit dies nicht mehr passiert, musst du nun die Variablen aus der URL oder aus Formularen explizit abholen. Das heisst zufällig wird dir in Zukunft keine Variable mehr über die Adresse untergemogelt.
Lass dich aber nicht in falsche Sicherheit wiegen. Denn viele Hoster haben REGISTER_GLOBALS noch an. Es bringt dir also gar nichts wenn dein Script mit REGISTER GLOBALS off einwandfrei und sicher funktionieren würde. Es muss mit beiden Methoden sicher sein..
Marc