PHP – register_globals

  PHP, Webhosting

Informujemy, że w PHP 5.4 register_globals nie są już dostępne, nie można ich włączyć w żaden sposób.

Jeśli register_globals są włączone, oznacza to, że dane w zmiennych pochodzących z adresu URL z wysłanego formularza (POST) lub z cookies (COOKIE) automatycznie pojawią się jako zmienne globalne w Twoim skrypcie PHP.

Np. jeśli wywołamy nasz skrypt w ten sposób: skript.php?imie=Karel&numer=12345register_globals są włączone, mamy dostępne te 2 wartości przez zmienne globalne $imie i $numer.

echo "Twoje imię: $imię<br />"
echo "Twój numer: $numer"

Zasada działania jest podobna jak przy przesyłaniu danych za pośrednictwem formularza metodą POST.

Istnieje jednak duże niebezpieczeństwo – przez dodanie dowolnego parametru do adresu URL Twojego skryptu, potencjalny atakujący może umieścić w Twoim programie dowolną zmienną globalną o dowolnej wartości, co może skutkować naruszeniem bezpieczeństwa, uszkodzeniem aplikacji, która się tego nie spodziewa.

Dlatego nie zaleca się używania register_globals w PHP, w kolejnych wersjach opcja ta nie będzie w ogóle dostępna.

Właściwe rozwiązanie

Dane z POST, GET i COOKIE powinny być obsługiwane przez zmienne superglobalne $_POST, $_GET i $_COOKIE.

  • $_POST to pole asocjacyjne zawierające dane z przesłanego formularza
  • $_GET to pole asocjacyjne zawierające parametry z adresu URL
  • $_COOKIE to pole asocjacyjne zawierające dane zapisane w cookies przeglądarki

Poprawiony przykład:

echo "Twoje imię: ".$_GET["imię"]."<br />";
echo "Twój numer: ".$_GET["numer"];

Włączenie register_globals

Jeśli mimo wszystko chcesz skorzystać z register_globals, tj. zobaczyć dane wejściowe POST, GET i COOKIES jako zmienne globalne w swojej aplikacji, masz 2 możliwości:

  1. Skorzystaj z funkcji import_request_variables(), która pobierze dane i wytworzy zmienne globalne.
  2. Włącz register_globals w Panelu Klienta w konfiguracji PHP.

Chcemy jednak zdecydowanie podkreślić, że nie zalecamy korzystania z register_globals! Poproś twórcę swojej aplikacji PHP, aby nie korzystał z register_globals, ponieważ jest to niebezpieczne i niekatulane rozwiązanie.

Powiązane linki