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.
reklama

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><br />deny from all<br /></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';<br />Header('Content-Type: image/gif');<br />readfile('images/'.basename($file));

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

Autor článku: Jan Polzer

Tvůrce webů z Brna se specializací na Drupal a Symfony. Obojí také školím spolu se základy SEO. Jsem Acquia Certified Developer a Site Builder a napsal jsem několik knih o Drupalu. Ve volných chvílích cestuji a podnikám výlety. Více se dozvíte na mém firemním webu.

reklama

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ář

Filtered HTML

  • Povolené HTML značky: <a href hreflang> <em> <strong> <cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <p> <br>
  • Řádky a odstavce se zalomí automaticky.
  • Web page addresses and email addresses turn into links automatically.

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

reklama
Novinka listopad 2020

 

Kniha 333 tipů a triků pro Drupal 9


Více na KnihyPolzer.cz

Sledujte Maxiorla na Facebooku

Maxiorel na Facebooku

Poslední komentáře
reklama
Nové diskuze
reklama
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