Nezabezpečený upload je vcelku častou chybou amatérských webů. Stačí použít Google dotaz upload inurl:upload.php a trochu pohledat. Někteří webmasteři si na svůj web umístí upload pro pohodlnější přidávání souborů na web. Na jeho zabezpečí již však často zapomínají. Mnoho nezabezpečených uploadů slouží pro nahrávání fotek a obrázků na server. Autor však již často zapomene určit povolené typy souborů. Vysvětleme si tedy, co to vlastně nezabezpečený upload je a jak jej zabezpečit. Nezabezpečeným uploadem chápeme upload, přes který můžeme na server nahrávat libovolné typy souborů, tedy i (mimo jiné) PHP skripty. Potom tedy není problém si pomocí nich vypsat seznam souborů a prohlížet si jejich zdrojové kódy, které mohou obsahovat například hesla k databázi. Soubory můžeme i editovat, takže máme nad daným webem úplnou kontrolu a stačil nám k tomu pouze Google a základní znalost jazyka PHP.

Upravit uploadovací formulář tak, aby přijímal pouze bezpečné typy souborů, je jednoduché. Stačí do skriptu sloužícího pro upload vhodně zakomponovat tyto tři řádky:

$mime_typy = 'image/gif|image/jpeg|image/pjpeg|image/png|text/plain';
if(!in_array($_FILES['soubor']['typ'], $mime_typy))
echo '<p>CHYBA ! Tento soubor je nepovoleného formátu.</p>';

Tento kousek zdrojového kódu většinou znamená kritický rozdíl mezi zabezpečeným a nezabezpečeným uploadem. V proměnné $mime_typy jsou vypsány povolené MIME typy souborů, se kterými je porovnáván MIME typ námi uploadovaného souboru. Pokud se MIME type neshoduje s ani jednou z možností, znamená to, že je nepovoleného formátu. Uživatel bude upozorněn a k uploadu nedojde. Pro více informací ohladně uploadování souborů pomocí PHP skriptu si přečtěte tento článek z oficiálního manuálu PHP.

Související příspěvky

Peter Wang