safecode.jpg
Andrea Kramecová
Andrea Kramecová
12. 10. 2018

3. díl webové bezpečnosti: Jak na bezpečné kontaktní formuláře

Co je tak složitého na formuláři? Udělám pár kolonek na jméno, příjmení, e-mail a telefonní číslo a není co řešit, ne? Přesně takhle to vypadat nemá. Formuláře, do nichž vaši zákazníci vepisují osobní údaje, jsou cenným zdrojem dat pro lidi zpracovávající objednávky, marketéry, ale také hackery. A přitom stačí zdánlivě malé chyby, které mohou zapříčinit hodně velký průšvih. A to ani nemluvíme o GDPR, s jehož příchodem se jakýkoliv detail o vašem zákazníkovi stává ekvivalentem zlaté cihly.

Technická ochrana formulářů v INSPIRE

A jak se s bezpečností kontaktních formulářů pereme u nás v agentuře? Tohle bude pro IT nepolíbené asi trochu techničtější popis. Můžete se o něm ale pobavit s nějakým kolegou ajťákem nebo nám prostě věřit, že to děláme dobře.

Protože INSPIRE projekty stojí na NETTE, používáme v základu všech formulářů CSRF (Cross-Site Request Forgery) ochranu. To znamená, že se na pozadí kombinuje uložiště v SESSION, JavaScript, hidden prvek formuláře a token. Token se vygeneruje, má danou platnost, uloží se v session, JavaScript jej zapíše do hidden prvku formuláře před odesláním a na serveru se vše zkontroluje. Jeden token znamená jeden pokus o odeslání formuláře. Je to taková neviditelná náhrada CAPTCHA, kterou všichni důvěrně známe jako kus náhodného textu, který musíme před odeslání nějakého formuláře opsat. Roboti, kteří se snaží váš formulář hacknout, obvykle neumí identifikovat dynamické prvky formuláře a na základě toho provést nějakou akci. Jednoduše jim chybí kontext okna prohlížeče.

INSPIRE formuláře mají navíc časový interval, za který lze formulář odeslat. To děláme individuálně pro každý formulář a prakticky to znamená, že na vyplnění formuláře a jeho odeslání potřebuje normální živý člověk přinejlepším jednotky vteřin. Proto po zapnutí můžeme provádět kontrolu toho, jak rychle od načtení stránky došlo k odeslání formuláře. A jestli to bylo rychleji, než Usain Bolt uběhne stovku, pak to vyhodnotíme jako pokus o útok. Ověření navíc probíhá nejenom na serveru, ale i na klientu. To znamená, že když formulář komunikuje se serverem, nejprve se podívá, jestli jsou data správně na serveru a když dojde k jejich přenosu, zkontrolují se ještě jednou u nás.

Samozřejmě máme implementovanou i reCAPTCHA, který zapínáme víceméně na vyžádání klienta. To je takové to kouzelné políčko, kde potvrdíte, že opravdu nejste robot. S CAPTCHA ověřováním má totiž problémy stále větší procento uživatelů. Buď se jim to jednoduše vypisovat nechce nebo obtížně luští často rozmazaný text.

A teď trochu lidsky

Víme, že spousta z těch informací nahoře vám nemusí být úplně jasná. Od toho jsou ale naši vývojáři tady – aby vám všechno vysvětlili a ukázali, proč je důležité mít vaše formuláře v bezpečí. Dejte nám vědět, pokud můžeme s něčím poradit nebo se prostě jen podívat, jestli nejsou ve vašem webu nebo e-shopu bezpečnostní trhliny velikosti Mariánského příkopu.