Zneužitelnost GIFu v PHP – braňte se

O možnosti zneužití speciálně upravených souborů GIF ve webových aplikacích se toho napsalo na českém i mezinárodním internetu spousta. Přesto si tento problém zaslouží být připomenut, a to zejména s ukázkou řešení, jak se takové zneužitelnosti z pohledu tvůrce webové aplikací bránit.

Zmíněný problém nastane v případě, kdy útočník použije soubor GIF, do jehož těla umístí nějaký škodlivý kód PHP. Tento soubor pak přejmenuje z obrazek.gif na obrazek.gif.php. Nyní mu stačí, aby takovýto upravený obrázek nahrál do nějaké webové aplikace. Pokud je server, na kterém tato aplikace běží, nastaven tak, aby automaticky zpracovával soubory končící s příponou .php, pak má útočník skoro vyhráno. Server totiž provede kód uložený v obrazek.gif.php a problém je na světě.

Řešení tohoto potenciálně velmi nebezpečného problému je jednoduché. Buď zajistíte, aby byly obsluhovány pouze obrázky s odpovídající příponou na konci (tedy .gif, nikoli .gif.php), nebo zamezíte přímému přístupu k souborům ve složce, do které jsou obrázky ve vaší aplikaci nahrávány. V praxi to vypadá tak, že využijete souboru .htaccess, do kterého umístíte tři řádky:

<Files images>
deny from all
</Files>

Chcete-li řešení přímo v PHP, pak musíte zajistit, aby s obrázky bylo také manipulováno jako s obrázky. Používejte funkci basename(), vyhnete se tak podvržení upravených cest k souboru.

$file = 'image.gif.php';
Header('Content-Type: image/gif');
readfile('images/'.basename($file));

Další informace k popsanému problému najdete v příspěvku na blogu PHP Classes (anglicky).

Buďme ve spojení, přihlaste se k newsletteru

Odesláním formuláře souhlasíte s podmínkami zpracováním osobních údajů. 
Více informací v Ochrana osobních údajů.

Autor článku: Jan Polzer

Tvůrce webů z Brna se specializací na Drupal, WordPress a Symfony. Acquia Certified Developer & Site Builder. Autor několika knih o Drupalu.
Web Development Director v Lesensky.cz. Ve volných chvílích podnikám výlety na souši i po vodě. Více se dozvíte na polzer.cz a mém LinkedIn profilu.

Komentáře k článku

návštěvník

Dost dobře nechápu onu zranitelnost. Pokud *jakýkoliv* uploadovaný soubor ukládám jako *.php, tak jsem, dámy prominou, naprostý kripl, protože do meta dat (jakéhokoliv) obrázku lze php kód nacpat, stejně jako do jakéhokoliv jiného souboru.

návštěvník

Taky nechápu, v čem je problém. Píšete o imaginárním útočníkovi, kterému stačí vytvořit GIF obsahující PHP kód... atd.

Jak váš útočník dostane tento GIF na můj server? Jak mě následně donutí, abych ho přejmenoval na *.gif.php?

A proč se v této souvislosti píše o GIFu? Vždyť tohle můžu udělat s libovolným souborem. Třeba umístím PHP kód do prostřed XLS souboru a ten pak přejmenuju na *.xls.php a spustím.

Ale fakt nevidím to nebezpečí. Jak by měl útočník tedy správně postupovat, aby u mě ten škodlivý PHP kód spustil?

Profile picture for user Jan Polzer

Doporučuji ke kouknutí http://www.scanit.be/uploads/php-file-upload.pdf

Jan Polzer

Přidat komentář

Odesláním komentáře souhlasíte s podmínkami Ochrany osobních údajů

reklama
Moje kniha o CMS Drupal

 

Kniha 333 tipů a triků pro Drupal 9


Více na KnihyPolzer.cz

Sledujte Maxiorla na Facebooku

Maxiorel na Facebooku

Hosting pro Drupal a WordPress

Hledáte český webhosting vhodný nejenom pro redakční systém Drupal? Tak vyzkoušejte Webhosting C4 za 1200 Kč na rok s doménou v ceně, 20 GB prostoru a automatické navyšováním o 2 GB každý rok. Podrobnosti zde.

@maxiorel na Twitteru

Maxiorel na Twitteru