Apache (DELSI)

Michal Kubecek mike na mk-sys.cz
Středa Říjen 27 12:17:50 CEST 2004


On Wed, Oct 27, 2004 at 10:54:01AM +0200, oldfrog.linux na volny.cz wrote:
> Uvedu podobne tri priklady. Nasledujici kod
> 
>    if ($authorized) {
>       include "/highly/sensitive/data.php";
>    }
> 
> obsahuje stejnou chybu jako kod
> 
>    if ($_GET['authorized']) {
>       include "/highly/sensitive/data.php";
>    }
> 
> Chyba spociva v tom, ze se program rozhoduje na zaklade hodnoty, kterou muze
> pripadne rucne zadat utocnik. V druhem prikladu muze hodnotu zadat utocnik 
> vzdy

Problém je ale v tom, že to druhé nikdo nenapíše, protože je z toho na
první pohled vidět, že se jedná o hodnotu od uživatele. To první už jsem
několikrát viděl. Samozřejmě je chybou použít neinicializovanou
proměnnou, ale takové chyby lidé čas od času dělají. Málokdo má
error_reporting nastaveno na E_ALL (já ano), aby mu to hlásilo i takové
chyby jako právě použití neinicializované proměnné. Proto je původní
koncepce PHP (s automatickou registrací) velmi nebezpečná - umožňuje
totiž útočníkovi inicializovat jakoukoli proměnnou na jakoukoli hodnotu.

Přirovnal bych to k různým technikám ochrany proti buffer overflow, ať
už příznak nespustitelnosti u AMD64 nebo různé chytré třídy, které
hlídají přetečení mezí. Také by se dalo říci, že jsou všechny zbytečné,
protože je-li program napsán správně, žádný buffer overflow nemůže
vzniknout. Praxe nás ale opakovaně přesvědčuje, že chyby se dělají.

							  Michal Kubeček



Další informace o konferenci Linux