Recenze knihy Zranitelný kód - Nejvážnější chyby, kterých se můžete ve svých webových aplikacích dopustit od Sverre H. Husebyho.
Kniha je určena pro všechny vývojáře webových aplikací a shrnuje základní pravidla, která je nutné znát při programování bezpečných webových systémů. Jak o ní říká sám autor Sverre H. Huseby: "Tato kniha je poněkud zvláštní." Je o bezpečnosti aplikací, ale nezabývá se šifrováním, firewally a podobnými věcmi. Zaměřuje se výhradně na bezpečnost zdrojového kódu.
Už od začátku knihy se nám autor snaží vštípit základní pravidla a postupy, jak se vyvarovat těch nejzávažnějších chyb. Celá kniha je protkána pravidly, která jsou zvýrazněná a očíslovaná. Ke každému pravidlu je vytvořen výstižný popisek, který ho definuje. Díky tomu se při prvním setkání s knihou můžete velice jednoduše a rychle seznámit s jejím hrubým obsahem. Tato pravidla jsou v knize dále rozváděna na příkladech.
Jednotlivé příklady jsou psány v jazycích PHP, Java, Perl, SQL a VBScript. Pro pochopení kódů však není nutné znát všechny tyto jazyky. Stačí umět například PHP a mít základní znalosti z programování (proměnné, cykly, podmínky atd.), protože ukázky kódů jsou psány v co nejkratším možném objemu a přehledně, aby se v nich čtenář neztrácel. Při čtení se však neobejdete bez znalosti HTML, protože se sem tam objevuje. Jde především o formuláře v kapitole o ošetření vstupu.
Líbí se mi, že autor poukazuje na fakt, že bezpečnost není stav, ale proces. Nemůžeme si tedy sednout a říct: "Mám svou webovou aplikaci zabezpečenou, a nic se tedy nemůže stát." Potencionální útočníci jsou často napřed a hlavně přemýšlejí destruktivně, zatímco vývojář aplikace myslí konstruktivně a často ho ani nenapadne, co vše by mohl útočník použít pro nabourání se do systému.
Celá kniha je protkána odkazy na externí zdroje, které slouží k podrobnějšímu studiu. Když autor píše o nějaké věci často, je zde v hranatých závorkách číslo, pod kterým můžete v sekci Odkazy na konci knihy nalézt další zdroj informací. Většinou se jedná o webovou stránku nebo knihu.
Publikace je koncipována tak, aby ji čtenář četl kapitolu po kapitole. Pokud ale máte o problematice bezpečnosti alespoň nějaké znalosti, není problém kapitoly přeskakovat a číst ty, které vás zajímají nebo je potřebujete právě prostudovat. Na začátek však doporučuji přečíst úvodní kapitolu o protokolu HTTP, kde jsou vysvětleny elementární věci o tomto protokolu.
Jednotlivé kapitoly
Kniha je logicky členěna do osmi kapitol. Každá kapitola má jedno hlavní téma, kterého se drží, a snaží se objasnit základní pojmy a dále poukázat na nejčastější chyby, kterých se vývojáři dopouští.
Kapitola 1 - Počátky
V této kapitole se autor stručně vrací do historie, kdy vznikaly protokoly HTTP, WWW apod. Hlavní náplní kapitoly je však rozebrání HTTP protokolu - jak funguje, jaké má záludnosti, nevýhody a výhody. Možná si říkáte, proč je v knize o bezpečnosti webových aplikací kapitola o HTTP. Je to z toho důvodu, aby vývojář pochopil, jak vůbec tento protokol funguje, a vyvaroval se chybám z důvodu nedorozumění. Jsou zde zmíněny také cookies, relace a šifrování HTTP - HTTPS, což už je přímému vývoji aplikací bližší.
Kapitola 2 - Přenos dat do subsystému
Většina složitějších webových aplikací používá nějaký subsystém. Pod subsystémem si můžeme představit například MySQL nebo jinou databázi. Data do ní vkládáme, upravujeme a vybíráme. Každá tato operace by měla být bezpečnostně odladěna. Právě k tomu nám pomůže tato kapitola. Velká část kapitoly je věnována SQL Injection a Shell Command Injection. K oběma zde nalezneme mnoho útržků kódu - jak těch chybných, tak těch zabezpečených.
Kapitola 3 - Vstup uživatele
Každý, kdo někdy psal aplikace, do které uživatelé vkládají data, ví, jaký s tím je problém. Uživatel dokáže vložit opravdu cokoli, a to do těch nejnevhodnějších míst. Proto je nutné nedůvěřovat slepě uživatelům, že zadávají správná data, a vše kontrolovat a ověřovat. Právě o tom je celá tato kapitola. Na příkladech ukazuje, jak by se měly jednotlivé vstupy kontrolovat. Autor také poukazuje na problém s neviditelnou bezpečnostní bariérou.
Kapitola 4 - Ošetření výstupu: útok Cross-site Scripting
Už název kapitoly napovídá, že budeme číst o Cross-site Scripting, který se používá často pro krádeže relací a hesel jednotlivých uživatelů aplikace. Autor varuje před tím, že hodně vývojářů aplikací sice dobře ošetří vstup, ale už se moc nevěnuje výstupu. Toho potom může útočník využít a nabourat se do vaší aplikace.
Kapitola 5 - Trojské koně
Tato kapitola velmi podrobně vysvětluje problém trojských koní a radí, jak se proti nim bránit na straně serveru. Popisuje příklady chování, kdy je uživatel donucen provést akci, kterou by při normálním chování neudělal. To vede k bezpečnostním problémům. Dozvíme se například, kdy je nebezpečné používat metodu GET u formulářů a jak zabránit zneužití aplikace trojskými koni pomocí lístků.
Kapitola 6 - Hesla a další tajné informace
Ochrana uživatelských hesel je jedno ze základních pravidel bezpečné webové aplikace. Autor v této kapitole nejen popisuje, jak hesla dobře ukládat do databáze a pracovat s nimi, ale ukazuje i principy, jak se pokusit hesla prolomit. Dozvíme se o základech kryptologie, ale ne z příliš teoretického hlediska. Autor se snaží oprostit od suchých matematických vzorců a spíše se soustředí na konkrétní příklady. Například symetrické a asymetrické šifrování, které je ukázáno a vysvětleno na obrázcích.
Kapitola 7 - Nepřátelé bezpečného kódu
V této kapitole se autor věnuje faktorům, které přímo ovlivňují kvalitu kódu z pohledu zabezpečení. Je zde zmíněna nepořádnost programátorů, ale také blížící se deadline projektů. Vývojář poté pracuje pod větším tlakem a snáze udělá nějakou chybu, kterou by při "běžném programování" neudělal.
Kapitola 8 - Přehled pravidel pro vytváření bezpečného kódu
V této poslední kapitole autor shrnuje všechna pravidla, která byla popsána v předcházejících kapitolách. Můžete si tak nově nabité vědomosti rychle zopakovat. Tato kapitola může také ale sloužit jako rozšířený obsah - jednoduše si tu dohledáte nějaké pravidlo a přes něj se dostanete na stránku v knize, která ho detailně rozebírá.
Přílohy
V knize dále nalezneme čtyři přílohy, které se věnují chybám ve webovém serveru, zachytávání paketů (Packet Sniffing), odesílání e-mailů ve formátu HTML s falešnou adresou odesílatele a další informace. Jedná se o kratší - pár odstavcové - texty, které nepopisují daná témata podrobně, ale spíše jen chtějí poukázat na tyto problémy. V textu je opět spousta odkazů na externí zdroje, takže si čtenář může další informace bez problémů dohledat.
Kniha Zranitelný kód má také svoji webovou stránku, na kterou se dostanete přes adresu http://innocentcode.thathost.com/. Na ní můžete nalézt předmluvu autora a také seznam důležitých pravidel pro webovou bezpečnost, která provází celou knihu a jsou také shrnuta v kapitole 8.
Závěr
Kniha se mi jako celek líbí. Na několika místech mi ale chyběl detailnější kód. Na druhou stranu se autor takto snaží minimalizovat složitost, čímž přispívá k tomu, že kniha je přístupná i pro méně pokročilé vývojáře. Jako velké plus knihy vidím odkazy na externí zdroje, které se vyskytují na mnoha místech knihy. Celkem jich zde můžeme nalézt téměř 150. Není proto nutné jednotlivé informace zdlouhavě dohledávat na internetu a můžete rovnou přejít na danou webovou stránku.