Nejbezpečnější e-shop je ten, který je zavřený. Ale zas moc nevydělává. Nedávno jsem slyšel něco o tom, že kdosi navrhuje, aby o víkendu obchody nebyly otevřené, tak třeba jednou dojde i na e-shopy a budou bezpečné aspoň v sobotu a neděli. Původní slajdy tyto poznámky neobsahují.
V půlce září 2015 zveřejnili lidé z Twista výsledky studie Český košík roku, ve které testovali Top 120 českých e-shopů. Mimo jiné zjistili, že 15 % e-shopů bylo zcela zabezpečených pomocí HTTPS a dalších 13 % používalo HTTPS alespoň pro přihlášení – ale to bohužel nestačí, jak uvidíme dále.
1. 4. 2016 jsem měření provedl znovu a na HTTPS běží celých 24 % e-shopů zařazených do studie Český košík roku 2015, tedy 29 ze 120 obchodů. Nárůst z 15,8 % mě těší, ale pořád je to hodně, hodně, hodně, hodně, hodně, hodně málo. Kolik e-shopů používá HTTPS alespoň pro ochranu přihlášení jsem nezkoumal.
Jen pro srovnání, Seznam na konci února 2016 zveřejnil statistiky nad vzrokem zhruba 700 000 českých titulních stránek (homepage) a jenom 1,23 % z nich používá HTTPS. To je fakt dost málo, myslím si, že na HTTPS by měl být každý web, nehledě na to, jestli se k němu přihlašuji.
HTTPS má na starosti dvě věci, ověření protistrany, tedy to, že data posílám tomu, komu mám, a šifrování přenášených dat. Data tedy nemůže nikdo odposlechnout ani změnit. Útočník by totiž po cestě ze serveru do prohlížeče návštěvníka mohl změnit například přihlašovací formulář, aby se zadané jméno a heslo posílalo někam jinam. Mohl by také vložit přihlašovací formulář někam kde běžně není, ale uživatel by to nepoznal a přihlašovací údaje vyplnil.
Pokud chcete web na HTTPS, a chtít byste měli, tak ho musíte mít na HTTPS celý, jinak to není úplně vono. Když budete pomocí HTTPS chránit jen login formulář a z něj odesílané jméno a heslo, tak pořád někdo může odposlechnout cookies, které prohlížeč bude posílat na tu nezabezpečenou HTTP část webu. Mizera se pak díky znalosti tzv. session cookie může za uživatele vydávat, aniž by znal jeho heslo.
HTTPS má dva úkoly (pomáhat a chránit), ale nezvládne už nic dalšího. HTTPS neumí zabezpečit váš web, sorry. Zaručí jen to, že data, která váš web opustí dojdou v nezměněné podobě do browseru, že do nich nikdo nestrčí reklamu nebo odkaz na stažení viru a že posílaná nepůjde odposlechnout. To ale stačí.
HTTPS dokonce nezabezpečí ani návštěvníky vašeho webu nebo e-shopu. Nezaručí, že jim ten web nepošle něco zákeřného, nějaký vir nebo tak něco. HTTPS zabezpečí jenom přenos dat mezi serverem a prohlížečem a je nutnou, ale ne postačující podmínkou pro zabezpečení. Jsou i jiné závažné chyby, kterým by se mělo věnovat trochu více pozornosti. O HTTPS se dozvíte více v mé jiné přednášce.
Útok Cross-Site Scripting (XSS) byl poprvé popsán v roce 1999. Funguje na principu zneužívání důvěry. Návštěvníci věří webům, které používají nebo navštěvují a mizera této důvěry zneužije a návštěvníkům a jejich prohlížečům něco nepěkného provede. I po 17 letech je XSS pořád velmi často používán.
alert(1)
XSS spočívá v tom, že útočník do stránky vloží JavaScript, který se poté spustí návštěvníkovi v prohlížeči. Útok možná budete znát, nejčastěji se demonstruje jako neškodné vypsání jedničky a vypadá to takto. Jenže XSS není jen alert(1)
, pomocí JavaScriptu lze v browseru dělat spoustu věcí, například získávat cookies, pouštět muziku, zobrazovat přesvědčivé odkazy na stažení zákeřných programů nebo vytvářet falešné přihlašovací formuláře.
Nástroj BeEF usnadňuje bezpečnostním testerům (a přednášejícím) demonstraci zákeřných XSS útoků. Ukázku naleznete na videu z E-shop summitu 2016 nebo v mojí prezentaci určené vývojářům, přibližně od 14. minuty.
Vývojáři zapomínají ošetřit uživatelský vstup už skoro 20 let a budou zapomínat pořád dál. Je tedy potřeba zavést další úroveň ochrany, když vývojáři zase zapomenou, tak ať nevyrobí tak velký problém. Jednou z těch dalších úrovní ochrany je Content Security Policy (CSP). Ta říká moderním browserům, odkud z jakých domén mohou načítat a spouštět JavaScript, stahovat obrázky, kam mohou odesílat formuláře apod. Některé nástroje, jako třeba Google Tag Manager vyžadují poměrně „otevřené“ nastavení CSP, ale politika může být nastavena na každou část e-shopu jinak. Např. v administraci e-shopu nejspíš nástroje jako je právě Google Tag Manager nepoužíváte, pomocí CSP tedy můžete chránit uživatele, kteří s ní pracují.
Content-Security-Policy
CSP je klasická HTTP hlavička, kterou pošle server prohlížeči a prohlížeč poté načítá zdroje jen z povolených adres. Mohu například nastavit, aby prohlížeč načítal JavaScript jen z domény, na které běží aplikace a když mizera do stránky dostane nějaký JavaScript odjinud, tak se nenačte a tím pádem ani nespustí. O implementaci Content Security Policy se dozvíte více v mé přednášce pro vývojáře.
alert('XSS')
Útok XSS se nevyhýbá nikomu a může natropit opravdu velké škody. Myslete na to a snažte se mizerům bránit více způsoby. Vaše weby potom budou mnohem hůře zneužitelné pro páchání útoků na vaše uživatele, kolegy a zaměstnance. Bezpečnost e-shopů jsme detailněji rozebírali v rozhovoru pro MladýPodnikatel.cz.