Zabezpečení před zranitelnostmi

Co chvíli je hlášena bezpečnostní díra na dalším významném webu nebo je díry zneužito. To je nepříjemné. Pokud vám záleží na zabezpečení vašich webových aplikací, je Nette Framework zcela jistě tou nejlepší volbou.

Cross-Site Scripting (XSS)

Cross-Site Scripting je metoda narušení webových stránek zneužívající neošetřených výstupů. Útočník pak dokáže do stránky podstrčit svůj vlastní kód a tím může stránku pozměnit nebo dokonce získat citlivé údaje o návštěvnících. Proti XSS se lze bránit jen důsledným a korektním ošetřením všech řetězců. Přitom stačí, aby váš kodér jen jednou jedinkrát toto opomenul, a celý web může být rázem kompromitován.

Příkladem útoku může být podstrčení upravené URL uživateli, pomocí které injektujeme do stránky svůj kód. Když aplikace nebude výstupy řádně ošetřovat, vykoná skript v prohlížeči uživatele. Tímto způsobem mu můžeme například zcizit identitu.

http://example.com/?search=<script>alert('Úspěšný XSS útok.');</script>

Nette Framework přichází s revoluční technologií Context-Aware Escaping, která vás provždy zbaví rizika Cross-Site Scriptingu. Všechny výstupy totiž ošetřuje automaticky a tak se nemůže stát, že by kodér na něco zapomněl. Příklad? Kodér vytvoří tuto šablonu:

<p onclick="alert({$message})">{$message}</p>

<script>
document.title = {$message};
</script>

Zápis {$message} znamená vypsání proměnné. V jiných frameworcích je nutné každé vypsání explicitně ošetřit a dokonce na každém místě jinak. V Nette Framework není potřeba ošetřovat nic, vše se udělá automaticky, správně a důsledně. Pokud dosadíme do proměnné $message = 'Šířka 1/2"', framework vygeneruje HTML kód:

<p onclick="alert(&quot;Šířka 1\/2\&quot;&quot;)">Šířka 1/2&quot;</p>

<script>
document.title = "Šířka 1\/2\"";
</script>

Cross-Site Request Forgery (CSRF)

Cross-Site Request Forgery je útok spočívající v tom, že přimějeme uživatele navštívit stránku, která skrytě vykoná útok na webovou aplikaci, kde je uživatel zrovna přihlášen. Lze takto například pozměnit nebo smazat článek, aniž by si toho uživatel všiml. Proti útoku se lze bránit generováním a ověřováním autorizačního tokenu.

Ochránit formulář před útokem Cross-Site Request Forgery lze v Nette Frameworku pouhým jedním příkazem:

$form->addProtection();

A nyní je formulář ochráněn. Doporučujeme takto chránit formuláře v administrační části webu.

URL attack, control codes, invalid UTF-8

Různé pojmy související se snahou útočníka podstrčit vaší webové aplikaci škodlivý vstup. Následky mohou být velmi různorodé, od poškození XML výstupů (např. nefunkční RSS kanály) přes získání citlivých informací z databáze nebo hesel. Obranou je důsledné ošetřování všech vstupů na úrovni jednotlivých bajtů. A ruku na srdce, kdo z vás to dělá?

Nette Framework to dělá za vás a navíc automaticky. Nemusíte nastavovat vůbec nic a všechny vstupy budou ošetřené.

Session hijacking, session stealing, session fixation

Se správou session je spojeno hned několik typů útoků. Útočník buď zcizí anebo podstrčí uživateli své session ID a díky tomu získá přístup do webové aplikace, aniž by znal heslo uživatele. Poté může v aplikaci provádět cokoliv, aniž by o tom uživatel věděl. Obrana spočívá ve správné konfiguraci serveru a PHP.

Přičemž Nette Framework nakonfiguruje PHP automaticky. Programátor tak nemusí přemýšlet, kterak session správně zabezpečit a může se plně soustředit na tvorbu aplikace. Vyžaduje to však povolenou funkci ini_set().