Hlavní navigace

Konečné řešení v boji proti spamu v diskusních fórech

Aktualizováno: Aktualizováno (4. 12. 2006 21:00)
Pavel Chalupa 4. 12. 2006

Představení nového způsobu filtrování spamu v diskusním fóru. Jednoduchá technologie založená na PHP, MySQL a knihovně GD se snaží odradit roboty a nabídnout uživatelům pohodlný způsob ověřování. Zdrojové kódy jsou navíc uvolněny pod licencí GNU/GPL v2. K dispozici je česká i anglická verze.

Spamový filtr využívá databázi MySQL a GD knihovnu pro generování obrázků ve formátu PNG. Dosud běžné ochrany proti spamu v diskusích i jinde využívaly jeden obrázek, který byl špatně čitelný pro technologie OCR rozpoznávající znaky. Podle mě se dříve nebo později dopracuje technologie OCR k tomu, že bude možná i dokonalejší než schopnosti člověka daný text přečíst. Dokonce bych řekl, že je tomu tak již nyní. Proto jsem zavrhl cestu, která je nyní hojně využívaná – např. Captcha. Zvolil jsem cestu obyčejných znaků a textu generovaných GD knihovnou a zobrazovanou jako PNG.

Systém je založen na textové otázce v národním jazyce a znakových kódech zadávaných též v národním jazyce. Věta i kód jsou zobrazovány náhodně jako text a PNG. To by mělo donutit případného útočníka, aby si celou sekci spam filtru musel převést na bitmapu. Tu následně musí přečíst přes OCR. To by při současných technologiích neměl být pro spamera problém. Další překážka, kterou stavím do cesty, je vkládání náhodných znaků do věty, kterou si útočník musí přečíst. Vypadá to jako překlepy a člověk si musí překlepy odfiltrovat. Robot s tím zřejmě bude mít problém. Robot by musel použít nějaký slovník, který je běžně součástí textových procesorů, a určit se 100 % pravděpodobností, o jaký překlep se jedná. Že to není tak jednoduché se můžete sami přesvědčit, pokud se takový překlep pokusíte ve svém editoru automaticky opravit. Ne vždy se to povede, protože je potřeba překlep vyhodnotit v kontextu věty. A kam tím mířím? Nejedná se konkrétně o češtinu, ale o anglickou verzi tohoto filtru. Vyhodnocování věty umělou inteligencí v angličtině bude vždy trochu napřed vzhledem k rozšířenosti tohoto jazyka. Vyhodnotit a zodpovědět jednoduchou otázku v angličtině by nějaká současná nebo budoucí umělá inteligence mohla. Pokud jí postavíme do cesty ještě překlepy, je to asi maximum, co můžeme udělat, aniž bychom ohrozili použitelnost filtru pro běžného člověka.

Vánoční stromek malý

Adventní kalendář

Už jste dnes viděli, jak vypadá další odkryté okýnko v našem adventním kalendáři? Každý předvánoční den se na jeho stránce jedna část odkryje. Nenechejte si uniknout pointu a diskutujte o ní v naší diskusi.

To máme tedy větu, která člověku nebo robotu říká, co má udělat. Pokud pokračujeme ve vyhodnocování jako robot a pochopili jsme, co máme udělat, už stačí jen na bitmapě filtru přečíst správná písmena. To bych na místě programátora spamového robota udělal asi jednoduchým grafickým filtrem podle barvy, který by vyloučil falešné znaky. Pak už jen zbývá přes OCR přečíst co zbylo a odeslat výsledný kód přes formulář. Zdá se Vám to jednoduché?

A aby toho nebylo málo, je ve zdrojovém textu výslovně doporučeno pro každou implementaci použít vlastní věty. Jako příklad uvádím věty ze zdrojového textu – 4 varianty pro kód se stejným barevným složením (opisují se v daném případě černé znaky, které jsou doplněny falešnými modrými):

  • „Opište znaky vlevo, zobrazené černě“
  • „Opište znaky nalevo, které nejsou modré“
  • „Opište nejtmavší znaky vlevo“
  • „Opište znaky nalevo, které nejsou v barvě oblohy“

Barvy si můžete nadefinovat sami, mělo by jít nadefinovat až devět barev a vždy zobrazit náhodně jen dvě vybrané. Jenže to je tolik kombinací vět ve zdrojovém textu, že se s tím asi nikdo nebude chtít psát. Variant jednotlivých vět je možné vytvořit libovolně mnoho, jako příklad jsou uvedeny čtyři a ve zdrojovém textu a u příkladu jsou nadefinovány jen první dvě varianty. Pro účinnost filtru je důležité zachovat různorodost a nadefinovat si vlastní věty při každé implementaci.

Spam cz
Spam en

Další ochranou, kromě překlepů a nutnosti vyhodnotit a pochopit větu, je obrana proti skenování databáze vět/otázek z daného serveru, aby útočník nemohl získat jednoduše větší část nebo celou databázi vět. (Tuto databázi by pak pro konkrétní server mohl zpracovat člověk a robota naučit odpovídat na otázku. Otázka by se pak vyhodnocovala podle 95 % podobnosti kvůli definovaným překlepům.) Identifikaci a vyhodnocování podle IP adres jsem zavrhl a vytvořil jsem jednoduchý filtr pro sledování zobrazení stránky s větou a kódem. Jsou definovány časové intervaly a pro každý časový interval je povoleno určité množství zobrazení filtru. Po překročení limitu se zobrazí „Spam filter aktivován” a žádnou větu ani kód neuvidíte. Limity pro každý časový interval si musíte nadefinovat sami podle skutečné návštěvnosti stránky pro vložení diskusního příspěvku. Limity jsou definovány pro 10 sekund, 1 minutu, 10 minut, 1 hodinu, 24 hodin, 1 týden a můžete si zvolit i své vlastní, podle toho jaké časové statistiky máte k dispozici. Tato ochrana by měla hlídat jakékoliv aktivity vybočující z běžného chování návštěvníka. Například i pokus o skenování databáze otázek prostřednictvím sítě botů z náhodných IP adres, pokud toto skenování nebude respektovat hodnoty průměrné návštěvnosti. Následně bych tedy doporučil zlikvidovat veškeré veřejně dostupné statistiky o návštěvnosti, aby spamer neznal průměrnou návštěvnost.

Na diskusích se objevily připomínky přístupnosti takových filtrů pro zrakově postižené. To bych řešil speciálním webovým prohlížečem pro zrakově postižené, který by celou stránku převedl do bitmapy, tu pak přečetl přes OCR a obarvenou stránku převedenou do textu poslal do čtecího zařízení pro zrakově postižené. Tím by se zrakově postiženým zpřístupnila spousta současných webů.

Na závěr ještě detail o zobrazovaných znacích. Vždy mějte na paměti, že zobrazované znaky musejí být jednoznačně čitelné a nezaměnitelné. Ve zdrojových textech jsou úmyslně vynechané některé znaky, u kterých by mohlo dojít k záměně – např. malé o, velké O a nula a některé další. Pro překlepy jsou vkládány jen písmena malé abecedy, aby překlepy dokonale zapadly do věty. Znaková matice čtených kódů je variabilní a můžete jí dát libovolné rozměry a definovat maximální a minimální počty znaků v řádku a počet řádků. To samé platí o celém čtverci: základem jsou 2 čtverce – levý a pravý. Ale můžete si nastavit například matici 2×3, tedy 6 čtverců. Definice otázek by pak vypadala asi jako „vlevo nahoře”, „dole uprostřed“ atd. Systém je tedy plně konfigurovatelný a při dodržení všech doporučení je dostatečně silný a robustní. Možná pro české prostředí nebude ani potřeba používat „překlepy”.

Připravil jsem dvě verze – českou a anglickou. U každé jsou k dispozici zdrojové kódy a funkční příklad. Anglická verze má i anglické komentáře ve zdrojovém textu.

odkazy:

česká verze: kregion.cz/dis­kusni-forum-komentarovy-spam-filter/

anglická verze: kregion.cz/dis­cussion-forum-commentary-spam-filter/

Aktualizováno:

Původní myšlenka obrany proti skenování otázek z náhodných IP adres byla zcela špatná. Umožňovala opakovaným reloadem zablokovat fórum. Chyba byla opravena a nyní systém vyhodnocuje reloady podle IP adres. Nyní si tedy opakovaným reloadem zablokuje útočník/návštěvník pouze přístup sám pro sebe.

Anketa

Řešili jste někdy problém se spamem v komentářích?

Našli jste v článku chybu?

4. 12. 2006 15:19

3) lide nebudou veci propagovane v spamu 100% bojkotovat.

Staci ze se o "produkt" zajima 1.0-0.1% (nejspis i min) lidi co spam dostanou a uz se to pri aktualni cene vyplati. :(

4. 12. 2006 11:32

narg (neregistrovaný)
Můžu Vám garantovat že např. nevidomí lidé repráky mají :-)
Podnikatel.cz: Přehledná titulka, průvodci, responzivita

Přehledná titulka, průvodci, responzivita

DigiZone.cz: Recenze Westworld: zavraždit a...

Recenze Westworld: zavraždit a...

Měšec.cz: U levneELEKTRO.cz už reklamaci nevyřídíte

U levneELEKTRO.cz už reklamaci nevyřídíte

Měšec.cz: Zdravotní a sociální pojištění 2017: Připlatíte

Zdravotní a sociální pojištění 2017: Připlatíte

Měšec.cz: Nenechte se ošidit, když vám staví dům

Nenechte se ošidit, když vám staví dům

Vitalia.cz: Paštiky plné masa ho zatím neuživí

Paštiky plné masa ho zatím neuživí

Měšec.cz: Finančním poradcům hrozí vracení provizí

Finančním poradcům hrozí vracení provizí

Root.cz: Certifikáty zadarmo jsou horší než za peníze?

Certifikáty zadarmo jsou horší než za peníze?

DigiZone.cz: Rádio Šlágr má licenci pro digi vysílání

Rádio Šlágr má licenci pro digi vysílání

Vitalia.cz: Říká amoleta - a myslí palačinka

Říká amoleta - a myslí palačinka

Podnikatel.cz: Babiše přesvědčila 89letá podnikatelka?!

Babiše přesvědčila 89letá podnikatelka?!

Vitalia.cz: Jsou čajové sáčky toxické?

Jsou čajové sáčky toxické?

Měšec.cz: Jak vymáhat výživné zadarmo?

Jak vymáhat výživné zadarmo?

120na80.cz: Pánové, pečujte o svoje přirození a prostatu

Pánové, pečujte o svoje přirození a prostatu

DigiZone.cz: ČT má dalšího zástupce v EBU

ČT má dalšího zástupce v EBU

Vitalia.cz: Mondelez stahuje rizikovou čokoládu Milka

Mondelez stahuje rizikovou čokoládu Milka

Vitalia.cz: Jmenuje se Janina a žije bez cukru

Jmenuje se Janina a žije bez cukru

DigiZone.cz: Sony KD-55XD8005 s Android 6.0

Sony KD-55XD8005 s Android 6.0

Měšec.cz: Air Bank zruší TOP3 garanci a zdražuje kurzy

Air Bank zruší TOP3 garanci a zdražuje kurzy

Podnikatel.cz: K EET. Štamgast už peníze na stole nenechá

K EET. Štamgast už peníze na stole nenechá