Otázka, jak se nabourat do cizího webserveru, napadla snad každého počítačového maniaka. Tento první díl série o webových bezpečnostních rizicích je věnován teorii průniků do cizích serverů skrz manipulace se zpracovávanými daty.
Otázka, jak se nabourat do cizího webserveru, napadla snad každého počítačového maniaka. Ať už byl motiv jakýkoli. (Já rozhodně neuznávám parazity, jejichž motivem je jen a pouze páchat škodu druhým.) A proč se zabývám bezpečností právě webových služeb? Chyby jsou přece ve všech aplikacích a pokud všechny chyby opravíte, stejně vygenerujete další chyby v těch opravách…
Existuje spousta programovacích jazyků. A každý má svoji syntaxi, strukturu, způsob vyhodnocování a také třeba striktnost otypování proměnných. A o tu právě jde. Největším rizikem programování webových aplikací je, že většina jejich jazyků téměř nedbá na datové typy. (Samozřejmě do toho nepočítám extrémy, jako je například web napsaný v Haskellu apod.)Pokud člověk chce pochopit úplný základ programování dynamických webů za minimální čas, je pro něj jazyk typu PHP nebo ASP vhodný. Nemusí řešit, že program spadne, když člověk do proměnné čísla typu integer vloží desetinné číslo (proměnné prostě blíže nedefinuje). Je očekávaná rychlá funkčnost a tím i další motivace začínajícího programátora.
Pokud se však tento začátečník později pustí do větších projektů, jako například webové databáze nebo jednoduchý redakční systém, nastávají první problémy, které právě s datovými typy souvisí. Vzhledem k tomu, že web poskytuje na klientově straně zcela otevřený HTML kód, těm zkušenějším je již při prvním pohledu do tohoto kódu zřejmé, kde web může mít bezpečnostní slabiny. Poté například stačí do požadavku (přenášené informace) zadat takový programový kód, aby jej skript, který je špatně napsaný (nekontroluje datové typy a nemonitoruje obsah proměnných), do svého kódu doslova začlenil a jeho příkazy provedl. Tím může v některých případech útočník získat kompletní kontrolu nad webem, jeho databází apod. Je to podobné jako odejít z bytu a nechat pootevřené dveře.
Obecně platí, že čím komplexnější a složitější web je, tím více bezpečnostních chyb se na něm může nalézat. Je proto důležité již při návrhu webu počítat s tím, že veškeré informace, které přicházejí „zvenčí“ (jejichž obsah může cizí člověk ovládat), musí být zanalyzovány. Já osobně si vždy nadefinuji funkci checkVar(variable, type), kterou proženu každou proměnnou, která neslouží pouze pro vnitřní potřeby programu. Ta na základě parametru „type“ určí, zda proměnná může obsahovat nebezpečné znaky a případně tyto znaky „zneškodní“. Ačkoli se to na první pohled nezdá, obrovské bezpečnostní riziko se může skrývat například i v obyčejném políčku pro hledání…