Nápověda - Register globals
Register globals je nastavení PHP, které určuje, jak má PHP interpret zpracovávat vstupní proměnné. V případě zapnutých register globals (register globals ON) PHP nekotroluje původ proměnné a programátor tak může s proměnnou nakládat stejným způsobem bez ohledu na to, je-li definována lokálně, z formuláře metodou POST či GET apod.
Protože jsou PHP skripty se zapnutou podporou register globals snadno zranitelné a mohou představovat hrozbu jak pro samotnou aplikaci uživatele tak pro server, na kterém běží, jsou register globals v PHP od verze 4.2.0 a novější standardně vypnuty (register globals OFF). Podrobnější informace získáte také na manuálové stránce PHP.
Jak správně psát skripty s vypnutou podporou register globals?
Podrobné informace o register globals naleznete přímo na manuálových stránkách PHP, proto zde uvádíme jen několik příkladů:
-
Chcete zpracovat proměnnou z URL (webová adresa stránky)
http://www.edrive-hosting.cz/index.php?webhosting=zaklad:nesprávný způsob (vyžaduje zapnuté register globals)
if(isset($webhosting))
echo $webhosting; // vypíše zakladS vypnutými register globals nedojde k výpisu proměnné, protože ta není definována.
správný způsob (vypnuté register globals)
Parametr je předáván metodou GET, proto je nutné sdělit PHP, že je požadovaná proměnná právě odsud.if(isset($_GET['webhosting']))
echo $_GET['webhosting']; // vypíše zaklad -
Chcete zpracovat proměnnou z jednoduchého formuláře:
<form method="post" action="index.php"> <fieldset> <legend>uživatel</legend> <label for="jmeno">jméno:</label> <input name="jmeno" id="jmeno" /> <input type="submit" value="odeslat" /> </fieldset> </form>
Po odeslání formuláře zpracujete proměnnou jmeno ve skriptu index.php následovně:
nesprávný způsob (vyžaduje zapnuté register globals)
if(isset($jmeno))
echo $jmeno; // vypíše hodnotu proměnné jménoS vypnutými register globals nedojde k výpisu proměnné, protože ta není definována.
správný způsob (vypnuté register globals)
Parametr je předáván metodou POST, proto je nutné sdělit PHP, že je požadovaná proměnná právě odsud.if(isset($_POST['jmeno']))
echo $_POST['jmeno']; // vypíše hodnotu proměnné jméno
Poznámka
Proměnné $_POST a $_GET se nazývají superglobální. Podrobnější informace o proměnných v PHP získáte na manuálové stránce.
Jak opravit nefunkční skripty?
Své skripty můžete opravit dvěma způsoby:
Přepíšete skripty tak, aby využívaly superglobální proměnné, jak bylo popsáno výše. Tento způsob je z dlouhodobého hlediska nejlepší a jednoznačně ho doporučujeme.
Pokud potřebujete své skripty zprovoznit v co nejkratším čase, pomůže vám přidání následující řádky do souboru .htaccess
php_flag register_globals onSoubor .htaccess umístěte do hlavního adresáře vašeho webu anebo do libovolného podadresáře dle potřeby. Umístěný soubor zapne lokálně register globals pro zvolený adresář (web) a jeho podadresáře.
Upozornění: ačkoli je tento způsob časově nenáročný, vřele vám ho nedoporučujeme. Zapnutím register globals vystavujete svou aplikaci možným útokům z internetu a riskujete tak ztrátu či poškození svých dat.
