Moduly pro nahrávání souborů jsou jedním z nejslabších článků webových aplikací. Jakékoli chyby, dokonce i ty, které považujete za malé, by mohly vést k tomu, že kontrola serveru spadne přímo do rukou kybernetického útočníka. Z tohoto důvodu potřebují vývojáři softwaru znát nejčastější chyby a některé způsoby útoku, které mohou nastat.
Co je tedy manipulace na straně klienta? Jak s tím můžete bojovat, aby byly vaše stránky a uživatelé v bezpečí?
Co je manipulace na straně klienta?
Manipulace na straně klienta je základním konceptem útoků na webové aplikace jako celku. Zjednodušeně to znamená, že už nemůžete důvěřovat žádným údajům, které uživateli posíláte. Kromě toho je manipulace na straně klienta jedním ze základů vývoje bezpečných aplikací. Pokud prozkoumáte modul pro nahrávání souborů, se kterým máte co do činění, a zvážíte manipulaci na straně klienta, data, kterým nemůžete důvěřovat, zahrnují:
- Název nahraného souboru.
- Typ obsahu nahraného souboru.
Tyto dvě položky jsou kde máte možnost přidat na seznam povolených jako vývojář softwaru. Údaje o názvu nahraného souboru mohou obsahovat cokoli s neoprávněnou manipulací na straně klienta. S daty Content-Type nahraného souboru, i když útočník nahrává soubor .exe, může se tento soubor v systému zobrazit jako obrázek/jpeg.
Přípona souboru a White Listing
Při vývoji modulů pro nahrávání souborů je první věcí, kterou musíte udělat proces přidávání na seznam povolených pro příponu souboru. Uživatel chce například nahrát soubor s názvem „muo.jpeg“. Musíte se ujistit, že tato přípona souboru, kterou chce uživatel nahrát, je .jpeg. Za tímto účelem by měl systém zkontrolovat nahraný soubor a zjistit, zda se jedná o jednu z povolených přípon souborů. Abyste pochopili, jak to můžete udělat, prozkoumejte následující jednoduchý PHP kód:
$file_parts = pathinfo($filename);
přepínač($file_parts['extension'])
{
pouzdro "jpg":
přestávka;pouzdro "netopýr": // Nebo exe, dll, so, atd.
přestávka;
pouzdro "":
pouzdroNULA: // Žádná přípona souboru
přestávka;
}
Můžete to udělat pomocí bloku kódu podobného tomu výše, nebo můžete použít třídy a funkce poskytované rámcem, který používáte.
Dávejte pozor, abyste nevytvářeli data přípony souboru analýzou názvu souboru podle znaku tečka (.), protože útočník může tento kontrolní krok obejít s názvem souboru, jako je „muo.jpeg.php“.
Co jsou informace o typu obsahu?
Informace o typu obsahu jsou informace odeslané v požadavku HTTP pro každé nahrání souboru. Internetový prohlížeč tyto informace detekuje a přidá je k odeslanému požadavku. Útočník se může pokusit změnit informace pomocí neoprávněné manipulace na straně klienta a obejít ověřování na straně serveru. V této fázi potřebují vývojáři kontrolní mechanismus, který by ověřoval informace o typu obsahu. To samo o sobě nebude stačit; přesto je to důležitý problém, kterému by vývojáři měli věnovat pozornost.
Řekněme, že kódujete mechanismus pro správnou kontrolu přípony souboru a přijímáte pouze soubory s příponou .jpeg. Kromě tohoto preventivního mechanismu můžete zkontrolovat informace o typu obsahu pouzdro a přijímat pouze soubory s informacemi image/jpeg, což představuje další úroveň ochrany proti kybernetické útoky
Soubory SWF Flash a kroky útoku
Přípona souboru a data Content-Type nic neznamenají pro internetové prohlížeče, které podporují zásuvné moduly, jako je Adobe Flash Player. Ačkoli podpora pro tento přehrávač již není k dispozici, je stále možné nainstalovat tyto související soubory na mnoho systémů, i když Flash zůstává bezpečnostním rizikem. V systému, který neučinil příslušná opatření, je možné volat soubor Flash s příponou
Aby mohli vývojáři jednat, potřebují znát cesty, kterými se mohou kyberzločinci ubírat. Může se to stát takto:
- Škodlivý útočník nahraje na cílovou webovou stránku soubor SWF (formát souboru Adobe Flash) s názvem „image.jpeg“. Během procesu nahrávání je v ověření whitelistingu potvrzeno, že soubor nahraný útočníkem má příponu .jpeg. Ověření typu obsahu se obejde manipulací na straně klienta. Představte si, že tento soubor nahraný aktérem hrozby jde na „www (tečka) cílová stránka (tečka) com/images/images.jpeg“.
- Řekněme, že útočník má web s názvem útočník (tečka) com. Útočník zavolá soubor image.jpeg nahraný na cílovou stránku na tomto webu pomocí
- Nevinný uživatel se přihlásí do útočník (tečka) com. Tento web vyvolá soubor SWF na adrese www (tečka) target-site (tečka) com/images/image.jpeg a provede příkazy zadané do souboru SWF.
- Díky tomu může kybernetický útočník vytvořit akce HTTP požadavku pro adresu cílového webu (tečka), aniž by si toho běžní uživatelé všimli. S těmito požadavky útočník využije relaci nevinného uživatele a obejde kontrola CSRF.
Chcete-li lépe porozumět tomuto scénáři útoku, považujte následující kód za kód HTML
styl="výška: 1px; šířka: 1px;" data="www.target-site.com/images/image.jpeg" typ="aplikace/x-shockwave-flash" allowscriptaccess="vždy" flashvars="c=číst&u=něco"
Jedním z nejlepších řešení je přístup k souborům nahraným pomocí nahrání souboru přes jinou subdoménu. Ve výše uvedeném scénáři můžete přistupovat ke statickým souborům nikoli ze stejné domény, ale z jiné subdomény takto: "http (dvojtečka)//file.target-site (tečka) com/images/image.jpeg".
Dalším řešením je přidat Obsah-Dispozice: příloha informace do odpovědi HTTP, když obdržíte žádost o přístup k souborům, které chcete nahrát.
Přijměte opatření týkající se chyb zabezpečení při nahrávání souborů
Jakékoli nahrání souborů, které mohou uživatelé provést na web, je nebezpečné, takže toto je jeden z problémů, kterému by vývojáři měli věnovat největší pozornost. Pokud útočníci objeví takovou chybu zabezpečení, mohou otevřít shell v rámci webu a snadno zneužít informace na serveru. Je životně důležité kontrolovat všechny soubory nahrané uživateli, používat metody whitelistu a pokud možno skrýt umístění nahraného adresáře.
A samozřejmě existuje mnoho dalších dalších kroků, které musíte podniknout, abyste ochránili svůj web, i když při nahrání modulů souborů provedete všechna doporučená opatření. Jedním z takových kroků, které můžete podniknout, je použití hlaviček zabezpečení HTTP.