O bezpieczeństwie skryptów PHP to napisano już mnóstwo artykułów i jest nawet temat oddzielny na tym forum. Musisz poczytać więcej żeby nie spotkała cię jakaś niespodzianka, jak ci ktoś zhackuje stronę.
Register_globals jest wyłączone nie bez powodu. Właśnie chodzi o bezpieczeństwo, czyli żeby nikt nie mógł wysłać dowolnych zmiennych.
Jeżeli register_globals jest
wyłączone, należy korzystać z tablic globalnych $_POST, $_GET, $_COOKIE itd
Czyli dane z formularza z pola o nazwie "imię" nie będą widoczna w $imie tylko w $_GET['imie']Zastosowany kod, który obchodzi taką sytuację, sprawia że sytuacja wygląda jak przy włączonych globals. Czyli każdy może wysłać to co chce, dopisując najzwyczajniej do linka &mojazmienna=1
Moim zdaniem rozwiązanie kwestii bezpieczeństwa za pomocą wyłączenia
register_globals to dobra idea ale dopóki można je włączyć to właściwie nic to nie daje koderom. To miał być sposób na różnego rodzaju niedopracowane, amatorskie kody, które miały pełno dziur. Ale sytuacja jest taka, że na jednych hostingach jest OFF a na innych jest ON. Jeżeli pisałbym wszystkie skrypty z założeniem że wszędzie jest OFF, no to może mnie spotkać przykra niespodzianka, gdy mój skrypt trafi na serwer gdzie jest ON.
Przykład:
$imie = $_GET['imie'];
if ($imie=="Adam") $wiek = 20;
if ($imie=="Mariola") $wiek = 25;
if ($wiek)
mysql_query("update users set wiek='$wiek' where imie='$imie'");
Przy register_globals na OFF wszystko jest ok.
Ale gdy skrypt trafi na serwer gdzie globals jest na ON to ktoś złośliwy może napisać w url'u coś takiego:
index.php?imie=stefan&wiek=tutaj_jakiś_sql_injection
Autor skryptu zakłada że zmienna $wiek może przyjąć wartość 20 lub 25. Gdy globals jest OFF a imię=Stefan to nic się nie wykona. Ale gdy jest ON no to mamy problem.
Wniosek z tego jest taki:Zawsze trzeba pisać skrypty zakładając gorszy wariant tj register_globals=On. A skoro tak to cała idea z globals=Off nie ma sensu.