WebToDate » O WebToDate » Technické informace » Bezpečnost

Bezpečnost

WebToDate jako webová aplikace obsahuje řadu bezpečnostních funkcí, které brání napadení aplikace. Základní zabezpečení musí samozřejmě vždy proběhnout na úrovni infrastruktury (přístup jen na povolené porty, nasazení firewallu, bezpečného připojení k administračnímu rozhraní, zabezpečení databáze apod.), na úrovni aplikace se používají zejména následující bezpečnostní prvky a funkce.

Ochrana proti útokům na přihlášení do redakčního rozhraní

Jedná se o možný útok, kdy na počítači, který má přístup k přihlašovací stránce redakčního rozhraní, je spuštěna aplikace, která se např. pomocí hádání uživatelských jmen a hesel snaží vyvolat přihlášení k aplikaci.

WebToDate zaznamenává do databáze IP adresy, ze kterých jsou uskutečňovány pokusy o přihlášení. Pokud v daném časovém intervalu je dosaženo x neúspěšných pokusů o přihlášení, další požadavky z této adresy jsou po určitou dobu ignorovány. Pomocným nástrojem je pak audit přihlášení sloužící k sledování úspěšných i neúspěšných pokusů o přihlášení.

Ochrana proti SQL injection

Útok typu SQL injection se provádí podstrčením neošetřených hodnot vstupních parametrů (URL, formulářů, cookies apod.), které vyvolá chybu v sestaveném SQL příkazu a následně umožní vyvolat přes napadený skript další nežádoucí a původně nezamýšlené SQL příkazy. V nejhorším případě útočník získává plnou kontrolu nad obsahem SQL databáze či dokonce i její strukturou.

Na vstupní hodnoty (parametry z URL, z formulářů, cookies) se provádí ve WebToDate typová kontrola a kontrola na očekávané hodnoty, tj. kontroluje se např., zda parametr, který musí obsahovat celé číslo, skutečně celé číslo obsahuje. Pro přístup k databázím a sestavování SQL dotazů se používají databázové třídy, pro každý typ databáze je vlastní třída, nad kterou je pak třída pro abstrakci od konkrétní databáze. Při sestavování SQL dotazu využívajícího danou položku na vstupu se volá interní metoda, která pro daný typ databáze ošetřuje hodnoty v SQL příkazu tak, aby příkaz nevyvolal SQL chybu.

Ochrana proti Cross Site Scriptingu (XSS)

Cross Site Scripting je typ útoku, kdy je útočníkem do stránky podstrčen kód (zpravidla v jazyce JavaScript), který se spouští v prohlížeči uživatele. Může jít o persistentní uložení kódu (např. do textu diskuzního příspěvku) nebo reflexní typ (kód není pevně uložen na serveru, ale je podstrčen např. přes URL apod.). Tímto útokem lze modifikovat obsah zobrazovaných stránek, ale i přistupovat k informacím, které se nacházejí v uživatelově prohlížeči (údaje ve formulářích, obsah cookies apod.). Může tak jít o první stupeň útoku směřující např. k získání přihlašovacích údajů.

Ochrana WebToDate proti XSS je implementována na vstupu, tedy při načítání vstupních parametrů. Při načítání hodnoty proměnné reprezentující vnější vstupní hodnotu se postupuje přes stejnou funkci pro načítání vstupních parametrů, lhostejno o jaké parametry jde (z URL, z formulářů, z cookies, ze serverových proměnných atd.). Funkce provádí převod vybraných znaků na HTML entity, aby nedošlo k jejich interpretaci a tak ke spuštění podstrčeného kódu.

Ochrana proti útokům na session

Útoky na session (stav aplikace) se uskutečňují zpravidla metodou session fixation (do prohlížeče je podstrčeno cookie udržující stav session s předem známou hodnotou, kterou používá i útočník) nebo session hijacking (hodnota cookie se stavovou informací se např. odposlechne z http provozu a použije v prohlížeči útočníka).

WebToDate obsahuje ochranu spočívající ve změně identifikátorů session při každé změně stavu uživatele (např. po přihlášení uživatele apod.) a v kontrole vybraných údajů o přihlášeném uživateli (např. jeho IP adresy) při každém požadavku.

Ochrana proti Cross Site Request Forgery (CSRF)

Útok Cross Site Request Forgery směřuje proti přihlášeným uživatelům, realizuje se tak, že uživatel je nějakým způsobem donucen vyvolat funkci systému (v reálu např. nějaké URL), které vyvolat nechtěl. Nejjednodušším příkladem je umístění HTML kódu pro obrázek do nějaké stránky, kterou uživatel otevře ve stejné instanci prohlížeče, v jaké je přihlášen k redakčnímu rozhraní, kód obrázku ale neobsahuje URL existujícího obrázku, ale plné URL platné v rámci redakčního rozhraní, jehož vyvolání např. smaže nějaký objekt z databáze. Uživatel pak nechtěně smaže položku databáze pouze tím, že zobrazí útočnickou stránku v prohlížeči.

Cross Site Request Forgery Cross Site Request Forgery

WebToDate se brání proti CSRF útoku generováním náhodných tokenů s využitím hashovacích funkcí. Tyto tokeny jsou vloženy do každého formuláře či funkce, která provádí nějakou změnovou akci a jsou před provedením této akce zpětně kontrolovány na platnost. Útočník tak bez znalosti tokenu (který je generován pro každý požadavek na server náhodně a unikátně) není schopen sestavit URL či jiný typ požadavku na server, který by byl takto nechtěně vyvolán.

Ochrana proti nežádoucímu úniku informací

Pokud dojde k nějaké běhové chybě a stránka vypíše chybové informace obsahující citlivé údaje (PHP chybové informace, cesty k souborům, výpisy SQL příkazů apod.), může to sloužit potenciálním útočníkům jako startovní informace pro další pokusy o napadení.

WebToDate má konfigurační volby, kterými lze nastavit úroveň výpisu chybových hlášení, pro provozní instalaci pak všechna chybová hlášení plně potlačit. V kombinaci se správnou konfigurací PHP by pak nemělo dojít k vypisování žádných zneužitelných informací o chybách a pouze k jejich protokolování na straně serveru.

Protokolování

WebToDate protokoluje všechny akce, které mění obsah webové prezentace a všechny výstupy z automaticky spouštěných úloh. Lze tak vždy dohledat, kdo kdy změnil danou stránku, zprávu, soubor apod.