Antispamová ochrana na našich webech
Zveřejněno 31. 7. 2024 14:28 | Napsal Petr Simonides | Doba čtení: 7 minut
Pokud máte na svých webových stránkách jakýkoliv formulář, určitě vám z něj už přišel nějaký spam. Přemýšleli jste ale někdy nad tím, jak takové situace vznikají? A kdo za nimi stojí? Jsou to uživatelé, nebo roboti? A lze se vůbec před spamem efektivně a dlouhodobě chránit?
Pojďme se na tuto problematiku podívat blíže: dnes vás necháme nahlédnout pod pokličku webových formulářů a představíme vám i jednotlivé typy jejich antispamových ochran.
Formulář
Obecně se formuláře na webech nebo ve webových aplikacích používají k různorodým účelům. My si pro tyto naše účely budeme pod formulářem představovat klasický kontaktní nebo poptávkový formulář, který je veřejně vystavený na webu.
Roboti
Robotem se myslí specializovaný nástroj nebo software, který čte web automatizovaně - buď jednorázově, nebo dávkově, v pravidelných intervalech. Roboty můžeme v základu rozdělit na "hodné" a "zlé".
Mezi "hodné roboty" patří například:
- crawleři vyhledávacích systémů (Google, Seznam), kteří indexují obsah na internetu
- čtečky pro zrakově postižené (speciální software), které uživatelům předčítají obsah webu
Mezi "zlé roboty" patří například:
- roboti hledající a zneužívající slabiny na webech (bezpečnostní díry, nezabezpečené formuláře, ...), za účelem získat z webu citlivá data, nebo pomocí něj spamovat e-mailové schránky
- roboti, kteří záměrně generují obrovské množství požadavků na konkrétní web (pouze volají jednotlivé stránky, aniž by četli jejich obsah) za účelem jej zpomalit nebo vypnout
Chování uživatele
Běžný uživatel si zobrazí vybranou stránku, přečte si její obsah a všimne si formuláře, který může, ale nemusí využít.
Pokud se rozhodne pro jeho využití, začne postupně vyplňovat jednotlivá formulářová pole, případně zvolí možnost automatického doplnění některých polí na základě osobních údajů, které má uložené ve svém prohlížeči (typicky e-mailová adresa, telefon apod.).
Někdy musí ještě navíc udělit souhlas se zpracováním osobních údajů, případně vyřešit kontrolní otázku (textově, obrázkově, vyřešit puzzle apod.)
Nakonec formulář odešle.
"Zlí" uživatelé
Na tomto místě bychom měli zmínit, že podobně jako existují hodní a zlí roboti, existuje také kategorie "zlých" uživatelů.
Jedná se o uživatele, kteří záměrně odesílají spam, ale nevyužívají za tímto účelem roboty - spam šíří manuální nebo poloautomatickou cestou.
Tito uživatelé jsou velice obtížně detekovatelní, protože se chovají jako "hodní" uživatelé, ale odesílají "zlý" obsah.
Chování robota
Robot zavolá adresu webové stránky (technický ekvivalent situace, kdy uživatel zadá adresu do prohlížeče a stránku si zobrazí) a obdrží její zdrojový kód.
Ten následně skenuje a dělá si obrázek o struktuře a obsahu stránky.
Dále postupuje podle svých interních instrukcí, které mu zadal programátor. V našem případě může hledat kód formuláře, do kterého vyplní údaje (zpravidla spamového typu) a technicky vynutí zpracování formuláře, čímž ho odešle, jakoby uživatel klikl na tlačítko.
Chování webu
Cílem antispamové ochrany formulářů je, aby zlý robot nemohl formulář vůbec zpracovat a aby případnými ochranami proti tomuto úkonu nebyl postižen uživatel. (Příkladem takového postižení je, když uživatel musí řešit výpočty, rébusy apod. a když jsou příliš složité, opakované apod., což v konečném důsledku může vést k tomu, že uživatel formulář raději opustí, než aby dokončil odeslání - řešení ho obtěžuje, nebo se mu ho nepodaří vyřešit ani napodruhé apod.)
Příklady standardních řešení antispamové ochrany formulářů:
- tajné formulářové pole - tzv. honeypot
- časové razítko
- kontrolní otázka - např. aktuální rok
- matematické výpočty
- captcha - viditelná
- captcha - neviditelná
Pojďme si tato řešení rozebrat podrobněji.
Tajné formulářové pole
Jedná se o pole ve formuláři, které je vizuálně skryté, takže se jím běžný uživatel nemusí zabývat (neví o něm). Robot naproti tomu čte zdrojový kód formuláře, takže se tímto polem zabývat musí. Principem této ochrany je právě tato rozdílnost.
Prakticky potom existuje řada způsobů, jak tuto techniku provést a kontrolovat.
- Jednou z možností je ponechání pole jako prázdné - pokud je při odeslání vyplněné, víme, že se jedná o robota.
- Další možností je předvyplnění tohoto pole na straně uživatele/prohlížeče pomocí jazyka Javascript, který někteří "hloupější" roboti neovládají, takže pole zůstane prázdné - potom je tedy legitimní situace, že je pole vyplněné, ačkoliv ho nevyplnil sám uživatel (udělal to za něj prohlížeč).
Nicméně vzhledem k tomu, že roboti jsou čím dál chytřejší (většina robotů už Javascript umí a také už umí ignorovat technicky skrytá pole), přestávají tyto techniky stačit a je třeba vymýšlet důmyslnější řešení.
Časové razítko
Opět se jedná o skryté pole ve formuláři, do kterého se v tomto případě uloží hodnota časového razítka (aktuální datum a čas s přesností na sekundy) jakožto čas zobrazení formuláře. Následně, po odeslání formuláře, se vytvoří další časové razítko (čas odeslání) a vyhodnotí se, jak dlouho trvalo odeslání formuláře.
Robot zpravidla odesílá formulář během několika málo vteřin, takže ho podle toho lze identifikovat. Nicméně díky automatickému vyplňování údajů z prohlížeče mohou být i někteří skuteční uživatelé velmi rychlí. A někteří roboti navíc umí odesílání záměrně zpomalovat, aby tyto ochrany obešli.
Kontrolní otázka / matematické výpočty
Jedná se o klasické textové pole, které uživatel i robot musí vyplnit. V praxi se jedná o otázky typu "kolik je 1 + 1", "jaký je aktuální rok/měsíc" apod.
Velkou nevýhodou této ochrany je, že obtěžuje uživatele a že může působit poněkud zastarale.
Faktem ale je, že jde o techniku poměrně účinnou, nicméně i tak prolomitelnou - robot se může jednoduše naučit tyto otázky rozpoznat a odpověď pak dokáže technicky jednoduše vypočítat.
Kontrola IP adresy
Po odeslání formuláře lze technicky zkontrolovat IP adresa, ze které bylo odeslání provedeno. Pomocí geolokačních funkcí a případně dodatečné kontroly vůči některé centrální databázi nahlášených IP adres lze zjistit, jestli IP adresa není podezřelá. Pokud jsou stanovena pravidla, že se očekávají návštěvníci/poptávky například pouze z ČR a SR, mohou odeslání z IP adres Argentiny působit podezřele.
Pouze na základě těchto kritérií ale může dojít k zablokování i legitimních odeslání, případně může být IP adresa nahlášena neoprávněně (záměrně, nebo kvůli zneužití) nebo ještě nahlášena být nemusí.
Roboti většinou IP adresy při každém požadavku mění. Další nevýhoda může být v tom, že geolokace a kontrola databáze může chvíli trvat a čekání na výsledek může znepříjemnit uživatelský zážitek po odeslání formuláře.
Captcha
Tento výraz je anglickou zkratkou a volně ho lze přeložit jako "automatický test pro rozlišení mezi člověkem a strojem". V praxi se jedná o složitější výpočty na základě mnoha údajů, podle kterých se vyhodnotí, jestli je uživatel robot, či nikoliv. Tyto výpočty (test) může proběhnout aktivním, ale i pasivním zapojením uživatele.
Aktivní zapojení uživatele
Příkladem aktivního zapojení je situace, kdy uživatel musí na obrázku rozpoznat určité předměty a označit tyto obrázky nebo jejich části. Dalším příkladem je řešení vizuálních puzzle, kde je nutná interakce pohybem. Případně je nutné z obrázku vyčíst určité skryté nebo zkomolené znaky nebo čísla, a ty potom opsat do textového pole.
Tyto interakce jsou založené na tom, aby byly co nejsložitější i pro takové roboty, kteří umí číst nejen kód, ale také obraz, ve kterém dokáží rozpoznat i standardní texty. Tudíž jsou složitěji čitelné i pro nás neroboty, a je zde tedy opět velká nevýhoda v tom, že nás uživatele obtěžují.
Pasivní zapojení uživatele
Příkladem pasivního zapojení je ekvivalent těchto testů, jejichž výsledek se ale provádí automaticky na pozadí a výsledek se ukládá do skrytého formulářového pole. Tyto testy probíhají od chvíle, kdy uživatel na stránku přijde, v některých případech i dříve, když stránku poprvé navštíví a udělí souhlas s ukládáním cookies.
Robustnější řešení mohou pracovat i s dalšími přístupnými údaji, které má uživatel v prohlížeči uložené. Před odesláním formuláře se zaznamenají informace o tom, jaké testy byly provedeny, a do skrytého pole se uloží výsledky. Po odeslání formuláře se prostřednictvím speciální služby provede porovnání a vyhodnocení. Tato technika se zdá být velmi efektivní a pro uživatele nejméně obtěžující, ale zároveň výpočetně nejnáročnější a nejméně transparentní.
Kontrola obsahu
Další, trochu odlišnou možností ochrany je vyhodnocování obsahu, který byl formulářem odeslán. Tato kontrola probíhá pouze po odeslání formuláře a spočívá v hledání klíčových slov, která by mohla napovědět, že nejde o legitimní odeslání.
V tomto případě může být velice nápomocna umělá inteligence, která bude pro tento účel natrénována. Například u formuláře, kde očekáváme poptávku, bude text nabízející zázračné produkty za skvělé ceny s odkazy směřujícími na cizí weby východních zemí působit podezřele a neadekvátně. V případě manuálních útoků mohou tyto klíčové znaky chybět a mohou být zasílána pouze nesmyslná slova nebo věty bez kontextu.
Nevýhodou je technická náročnost takového řešení a dále nemusí být odezva výsledku vyhodnocení v reálném čase dostatečně rychlá. To ale může vyřešit například asynchronní zpracování (tj. na pozadí), kdy formulář zobrazí poděkování ihned po odeslání, aniž by ještě bylo známo, jestli bylo odeslání skutečně úspěšné. Na základě vyhodnocení, které proběhne na pozadí, se teprve rozhodne, jestli a jaký e-mail se potom odešle.
A jakou techniku používáme v XARTu?
V průběhu let jsme postupně provozovali a zkoušeli všechny zmíněné typy antispamových ochran. A můžeme říci, že neexistuje varianta, která by byla univerzální a efektivně použitelná vždy a všude, roli hraje mnoho faktorů.
Nám se nejvíc osvědčil postup kombinace více variant a pravidelného sledování situace, která se v průběhu času mění - a v dnešní turbulentní době se bude měnit stále častěji. Platí tu totiž pravidlo, že co funguje dnes, za pár měsíců už nemusí, a v případě používání řešení třetích stran zase co je dnes zdarma, zítra už být nemusí (anebo jen v omezené formě).
V našem vlastním redakčním systému RE:X používáme ochranu, která je pro návštěvníky co nejkomfortnější a při vyplňování formulářů je neobtěžuje (nevyžaduje aktivní zapojení).