Upozorňujeme, že v PHP 5.4 již register_globals vůbec neexistují, nelze je nijak zapnout.
Pokud jsou register_globals zapnuté, znamená to, že data v proměnných pocházejících z URL adresy (GET), z odeslaného formuláře (POST) nebo z cookies (COOKIE) se automaticky objeví jako globální proměnné ve vašem PHP skriptu.
Např. voláme-li náš skript takto: skript.php?jmeno=Karel&cislo=12345 a register_globals jsou zapnuté, máme tyto 2 hodnoty přístupné přes globální proměnné $jmeno a $cislo.
echo "Vaše jméno: $jmeno<br />" echo "Vaše číslo: $cislo"
Podobně to funguje při odeslání dat přes formulář metodou POST.
Zde je však schované velké nebezpečí – přidáním libovolného parametru do URL adresy vašeho skriptu může případný útočník do vašeho programu dostat libovolnou globální proměnnou s libovolnou hodnotou, což v aplikaci, která s tím nepočítá, může vyústit prolomení zabezpečení, způsobit škody apod.
Proto je používání register_globals v PHP již nedoporučované a v dalších verzích již tato možnost nebude vůbec existovat.
Správné řešení
Správně se má s daty z POST, GET a COOKIE pracovat pomocí superglobálních proměnných $_POST, $_GET a $_COOKIE.
- $_POST je asociativní pole, obsahující data z odeslaného formuláře
- $_GET je asociativní pole, obsahující parametry z URL adresy
- $_COOKIE je asociativní pole, obsahující data, uložená v cookies prohlížeče
Opravený příklad:
echo "Vaše jméno: ".$_GET["jmeno"]."<br />"; echo "Vaše číslo: ".$_GET["cislo"];
Zapnutí register_globals
Pokud přesto nutně potřebujete používat register_globals, tj. vidět vstupní data z POST, GET a COOKIES jako globální proměnné ve své aplikaci, máte 2 možnosti:
- Použijte funkci import_request_variables(), která data načte a globální proměnné vytvoří.
- Zapněte si register_globals v zákaznické administraci v konfiguraci PHP
Přesto chceme znovu zdůraznit, že jakékoliv zapínání register_globals rozhodně nedoporučujeme! Požádejte tvůrce své PHP aplikace, aby register_globals nepoužíval, protože se jedná o nebezpečné a zastaralé řešení.