Konfigurační direktiva register_globals
byla jednou z funkcí v PHP, která umožňovala automatické proměnné získané z uživatelského vstupu (jako jsou GET, POST a COOKIE) přístupné jako globální proměnné ve skriptu. Tato funkce byla z bezpečnostních důvodů odstraněna v PHP 5.4.0, ale stále je důležité rozumět její historii a potenciálním rizikům, které s sebou přinesla.
Rizika spojená s používáním register_globals
Přehled rizik
Povolení register_globals
mělo za následek, že proměnné z externích zdrojů (GET, POST, COOKIE) byly automaticky dostupné ve skriptech, což výrazně zvyšovalo riziko bezpečnostních útoků, jako je například:
- Narušení integrity dat: Útočník mohl přepsat klíčové proměnné ve skriptu tím, že poslal data stejného názvu jako interní proměnné skriptu.
- SQL Injection: Když byly databázové dotazy konstruovány s neověřenými proměnnými, útočník mohl manipulovat s těmito proměnnými a spustit škodlivé SQL dotazy.
- Cross-Site Scripting (XSS): Nebezpečí XSS útoků bylo zvýšeno, pokud vstupní proměnné nebyly řádně escapovány.
Příklady zneužití Jednoduchý příklad zneužití register_globals
by mohl vypadat takto: Pokud máte skript, který očekává proměnnou $is_admin = false;
a ovládá přístup k administrativním funkcím, útočník by mohl odeslat požadavek s parametrem is_admin=1
, což by ve skriptu s povolenými register_globals
nastavilo $is_admin
na true
.
Bezpečnostní opatření Zakázání
register_globals
Nejlepším způsobem, jak se vyhnout rizikům register_globals
, je jeho úplné zakázání. Toto nastavení lze provést v konfiguračním souboru php.ini
nastavením register_globals = off
.
Validace vstupů
Každý vstup od uživatele by měl být řádně validován a sanitizován, aby se předešlo nechtěnému přepisu proměnných nebo jiným bezpečnostním hrozbám. Použití funkce filter_input
a dalších bezpečnostních knihoven může pomoci ochránit aplikaci.
Ověření identity uživatele
Důležité je zabezpečit skripty pomocí mechanismů autentizace a autorizace, aby uživatelé neměli možnost přistupovat k citlivým částem aplikace bez příslušných oprávnění.
Ačkoliv register_globals
již není součástí novějších verzí PHP, historie a lekce, které nám přinesla, jsou stále relevantní. Rozumění potenciálním bezpečnostním rizikům a implementace vhodných ochranných opatření je klíčové pro vývoj bezpečných web aplikací.