Opravdu funkční antispam řešení

Vytisknout stránku Vytisknout stránkuMichal Škrabálek, 10. červenec 2006

Opravdu funkční antispam řešení

Každé navštěvovanější webové stránky se dříve nebo pozěji stanou obětí útoků zákeřných spamovacích robotů. Ti jsou schopni během několika minut vložit stovky reklamních komentářů, které se jen velmi těžko mažou a obtěžují čtenáře. Co s tím?

Můžeme použít počmrkaný obrázek, který budou muset uživatelé před odesláním komentáře vyplnit. Otravné, hloupé, odrazující. Přitom není tak těžké v pár krocích vytvořit antispam, který podobným útokům zabrání automatizovaně.


1. Skrytá formulářová pole

Do zdrojového kódu umístěte pole skrytá pomocí CSS, která se běžným návštěvníkům nezobrazí. Pro spamboty mají velmi lákavé názvy - "message", "url", "add". Je-li alespoň jedno z těchto polí vyplněno, komentář je spam. Uživatel je nemůže vyplnit, protože je nevidí. Roboti vyplňují všechno a sami se lapí.

2. Falešné odesílací tlačítko

Před odesílací tlačítko přidejte ještě jedno, také skryté, a lákavě ho pojmenujte jako "Submit". Roboti ve většině případů odesílají formulář právě prvním odesílacím tlačítkem a tím je lehce odhalíte.

3. Doba psaní příspěvku

Vycházejme z toho, že roboti odesílají hromadu spamu automatizovaně ihned po načtení stránky. Běžný uživatel naopak odešle svou zprávu až po nějaké chvíli (musí ji napsat, přečíst si okolní komentáře či samotný článek, apod.). Toho lze efektivně využít. Změřte dobu mezi načtením stránky a odesláním komentáře a pokud je kratší, než řekněme 7 vteřin, s největší pravděpodobností jde opět o spam. Technicky stačí do jednoho skrytého políčka uložit aktuální timestamp a ve scriptu pro přidání komentáře kontrolovat uloženou hodnotu aktuálním časem. Pro jistotu je dobré hodnotu nějak šifrovat (obrátit pořadí písmen, vynásobit zvoleným číslem, apod.), aby roboti nepoznali, že jde o timestamp a nezkoušeli ho podvrhnout.

4. Zakázané výrazy

Spam velmi často obsahuje stejné výrazy - části HTML scriptů, farmaceutické názvy, atd. Spamovací roboti mají malý slovník a některá slova milují, zatímco běžní návštěvníci nemají potřebu zmiňovat se o přípravcích na prodloužení erekce.

5. Počet odkazů v příspěvku

Roboti rádi vkládají větší množství odkazů. Spočítejte je a porovnejte s množstvím obyčejného textu. Je-li odkazů hodně a textu málo, jedná se o spam jak vyšitý.

6. JavaScript

Naprostá většina spamovacích robotů jsou hloupé stroje, které umí pouze vyhledat formulářová políčka v HTML kódu. Když nastavíme formuláří falešnou action (stránku, kam se odeslaná data odesílají) a následně JavaScriptem doplníme správnou, roboti budou nahraní. Nebo javascriptem vložíme celý formulář či ho načteme externě pomocí AJAXu. Lze vymyslet hodně možností, ale až se roboti JavaScript naučí, přestane to fungovat.

7. Doplňky

Když už se v tom vrtáte, ulehčete život sobě i svým čtenářům. Odstraňte mezery a prázdné řádky na začátku i konci příspěvků, velké množství pakujících se znaků (např. "!!!!!!!!!" převeďte na "!!!"). Zamezte vkládání duplicitních příspěvků.


Úskalí

Při programování antispamu kladu důraz na to, aby náštěvníci nic nepoznali a nebyli nijak omezeni. Ze zásady neuznávám řešení ve formě počmrkaného obrázku, jehož text musí uživatelé před vložením příspěvku opsat, stejně jako nutnost vykonání jakékoliv další akce nijak nesouvisející s psaním příspěvku (zaškrtávání políček, tlačítek, opisování čísel, doplňování hodnot, povinná registrace, atp). Spoustu lidí to štve a přijít jen o jeden kvalitní komentář proto, že jeho autor nemá rád tyto klacky pod nohama, je především vaše škoda.

Výsledky

Tento antispam je součástí redakčního systému CalmCube2 a je nasazen na stovkách stránek. Funguje naprosto spolehlivě, nepropustí nic. Naprostá většina robotů si vyláme zuby už na prvním, maximálně třetím stupni ochrany. Další jsou spíš pro jistotu. A jistota je kulomet. O funkčnosti tohoto řešení svědčí i to, že bez úprav funguje od roku 2006 s nezměněnou spolehlivostí. Reálný příklad je např. web K2 Studio, který spammery dost přitahuje - tento antispam tam vyblokoval během tří let téměř milion spamů.

Vytisknout stránku Vytisknout stránkuMichal Škrabálek, 10. červenec 2006, zobrazeno 45301x, dnes 2x
Hodnocení5.0 (4)

Články > Návody > Související

15+ tipů pro mobilní verzi webu15+ tipů pro mobilní verzi webu
Mobilní uživatelé dobývají internet. A trpí. Pracovat s běžnou webovou stránku na malém displeji telefonu je totiž...
Co dělat, když vás někdo okrade na internetuCo dělat, když vás někdo okrade na inter...
Nakupujete na Aukru, eBay nebo jiných webech? Pak se dříve nebo později stanete obětí podvodu. Tak to prostě je....
13 rad, jak se nenechat napálit na Facebooku13 rad, jak se nenechat napálit na Faceb...
Věděli jste, že Facebook poskytuje vaše velmi citlivé informace lidem, kteří se často pokouší vás okrást nebo vám...
Dark Art - Tajemný koktejl emocíDark Art - Tajemný koktejl emocí
Vyvolávat emoce je cílem téměř každé fotografie. Chcete-li na diváka opravdu zapůsobit a máte rádi temné a smutné...
Tipy pro hezké fotky: Kouzlo ostrostiTipy pro hezké fotky: Kouzlo ostrosti
Tímto článkem pokračuje krátký seriál pojednávající o zlepšování hotových fotografií. Minule jsme si řekli, jak...
Tipy pro hezké fotky: Upravujeme barvyTipy pro hezké fotky: Upravujeme barvy
Ve volném pokračování článku 15 tipů pro hezké fotky si ukážeme na příkladech, proč je fotka emotivnější se ztmavenými...

edit Přidat komentář

Komentáře (64)

#64
Patrick Kusebauch
0
14. únor 2012, pata.kusik111 (at) gmail.com
Ahoj, ještě jedna variace na tvojí ochranu pomocí CSS. Podle mne je display:none velmi nápadné a boti se ho velmi brzo naučí obcházet. Navrhoval bych šikovně umístěné visibility:hidden. Avšak pro mne jsou největší vítězem bloky s nižším z-index a position:absolute např -12 000. Je to pak umístěné absolutně mimo stránku pro příštích 15 let trufl bych... si říct, a pak stačí pouze přidat jednu další nulu (ale tou dobou bych řekl že budeš muset předělat i design webu...). více
Odpověď: Ahoj, kouzlo tohoto řešení je v kombinaci několika prvků - vyloženě se počítá s tím, že roboti něco přelousknou, jde o to, že nepřelousknou vše najednou. Dle mého názoru je ochrana na úrovni CSS (visibility:hidden, display:none, z-index) naprosto ekvivalentní. Pokud už roboti budou na vyšší úrovni, zvládnou přečíst veškeré CSS, nejen jednu hodnotu. Pak už je jedno, co se použije.

#63
had
0
27. leden 2012, akfak.naj (at) seznam.cz
Ahoj, opět musím s politováním říct, že mi přes to přešel nějaký spam. Mám to nasazené dvakrát na jednom webu (ve fóru a komentářích článků) - ve fóru mám navíc fiktivní URL a změnu javascriptem - tam to funguje 100%, ale u komentářů, kde chybí javascriptová změna action, tak tam přes to přešli, i přes časovou ochranu a analýzu textu...
Odpověď: Ahoj, ne vždy je spam automatizovaný. V Číně se najímají lidé za dolar denně, aby vkládali spam ručně. Je to šílené, ale je to tak. Tomuto se bránit nelze. Automatizovaným útokům ale řešení odolává, v mém případě stoprocentně, neprošlo absolutně nic. Ani písmenko. Tento antispam běží na desítkách stránek, malých i velkých, jako součást redakčního systému CalmCube2. Na každém takovém webu byly dle logu filtrem zastaveny tisíce spamových zpráv.

#62
Karlos
0
2. září 2011
Ahoj, díky za inspirující řešení. Je až k neuvěření, že už je to 5 let, kdy tento příspěvek vznikl a stále je aktuální Zdá se že roboti se zas až tak rychle neučí novým věcem.
#61
Tom
0
15. listopad 2010, tom13 (at) atlas.cz
Ahoj, moc zajímavej článek, původně sem chtěl použít obrázek s kódem, ale nakonec sem to udělal jinak a inspiroval se tady - obrázek s názvem captcha a i pole pro doplnění sem nechal, obrázek s textem vytvořil ve Photoshopu jednou pro vždy, dal do formuláře a celý to skryl pomocí css, teď ověřuju nevyplnění pole captcha, pokud bude vyplněný, je to robot,... mezi obrázkem a polem pro doplnění je text "!NE!opisujte kód" - to pro případ, že by si někdo stránky načet v textové podobě. Nevím nakolik to bude účinné, ale na čas by to fungovat mohlo. Pokud to tu někdo předemnou navrhoval tak se omlouvám za duplicitu, ale komentáře sem prolítnul jen tak v rychlosti... ;o) více
#60
Giga
0
2. srpen 2010
Naozaj podnetný článok. Aplikoval som na jednom webe. Časové razítko som realizoval prostredníctvom databázy. Pri otvorení stránky sa vygeneruje unikátny náhodný kód, ktorý je uložený s časom vzniku do databázy. Ten istý kód je v "hidden" poli formulára. Pri odoslaní príspevku sa overuje či verifikačný kód existuje a ak áno, tak sa testuje jeho vek. Ak je... starší ako 10 sekúnd, správa je prijatá. Databáza sa priebežne čistí od verifikačných kódov starších ako (napr.) 1 hodina. Funguje to veľmi dobre. více
#59
Jonas
+1
4. duben 2010, jonas.serych (at) gmail.com
Ještě jednou pozor na ten Javascript! Je to jistě zajímavý nápad, ale přecijen existují i lidé, kteří ho nepoužívají. Je jich sice málo a já osobně je naprosto nenávidím, ale stejně tu jsou. Myslím, že by docela stačilo na stránce, kam se form odesílá, napsat aby si JS zapli. Ať bych byl jakkoli paranoidní, neboco a nepoužívál JS, asi by se mi dvakrát nelíbilo, kdyby nějáký FORM bez jakéhokoli důvodu nefungoval.
Odpověď: Velmi dobrá připomínka. Sám toto doplnění na novějších webech používám. I přes to, že pokud si někdo vypne JavaScript, musí s nefunkčností některých webů počítat, JavaScript už je ve větší či menší míře vyžadován prakticky všude.

#58
marek
0
14. březen 2010
"Parazitní formulář neuspěje, protože zašifrované časové razítko se generuje v PHP na serveru. S tím si parazitní formulář neporadí" ale ano poradi staci mu odkopirovat tu hodnotu a pouzivat ju do nekonecna...
Odpověď: To je logický nesmysl. Ta hodnota je pokaždé jiná (časové razítko), platná pouze pár minut, navíc doplněná libovolným hashem, takže "zvenku" nelze nijak zjistit její hodnotu a i kdyby to někdo na triliontý pokus zjistil, za pár minut je mu to k ničemu, protože systém právě na ní ověřuje, před jakou dobou byl formulář odeslán.

#57
marek
+1
7. březen 2010
(Vopred sorry ze nepisem s diakritikou ale uz som zvyknuty aj bez nej citat aj pisat) Ahoj, pisem po dlhej dobe, ale myslim ze tento clanok si to zasluzi Uz som ho kedysi cital a az dodnes som ho opät hladal - kto hlada najde. Musim priznat robim teda finishujem si blog a stale mi lamalo hlavu ako to osetrit na... anti-spam. Uvazoval som to vyriesit cez tokeny do hidden inputov ale potom ak by som nechcel navstevnikov obmedzovat na zapnuty javascript/cookies alebo podobne bolo by mi to naprd. Spomenul som si akurat na odklonenie javascriptom co je podla mna dost nepodarene lebo az 18% navstevnikov ma vypnuty javascript/cookies a potom som si este spomenul na ten prvy bod ale ten sa mi zdal dost slaby - keby si niekto kukol zdroj svojho bota by upravil tak ze by to nepomohlo... moj problem prave riesi 1. a 3. co sa tyka slovnikoveho filtra (4) to ma moc nelaka a myslim si ze ked to dobre spravim aj s tym sifrovanim tak mam po probleme (mam ale este jednu otazocku ked mam napriklad uz ten zasifrovany cas niekto si kludne moze spravit parazitny formular a skopirovat to cele a ked pri odoslani sa porovna s casom aky je prave tedy a rozdiel vznika stale vacsi a vacsi no a tomuto moc nerozumiem nemohol by si mi to prosim vysvetlit? ale aj tak: ) VAZNE VELKA VDAKA ! více
Odpověď: Ahoj, předně těch 18 % návštěvníků s vypnutým javascriptem / cookies je naprostý nesmysl. Ve skutečnosti je to dnes 0,3 - 3% (zdroje se rozcházejí, ale osobně to tipuji maximálně na procento, spíš míň). Těch 18 % platilo možná před deseti lety. Co se týče časového razítka. Parazitní formulář neuspěje, protože zašifrované časové razítko se generuje v PHP na serveru.... S tím si parazitní formulář neporadí. A pokud nezná šifrovací systém, nemůže si časové razítko nijak vygenerovat, tzn. ochranu obejít. více

#56
Roman
0
21. únor 2010
Článek pěkný.Pokusím se implementovat.
#55
Billy
0
13. leden 2010
Tak po hodně dlouhý době napíšu někam komentář. Tohle nemá chybu. Až do teď mě osobně roboti nic nedělali, ale bude to tím že mám weby s nezajímavým obsahem (pro většinu Ale občas když někomu vypomáhám s PHP, tak už se stím setkávám. Díky za tyhle rady, už žádné opisování obrázku. (teda zatím) .)
Další komentáře
CalmCube2 CMS
RSSGoogle PlusYouTubeVytisknout stránkuGoogle Play Music· Mapa stránek· Mobilní verze · © 1998 - 2018 Michal Škrabálek