Internet Info, s.r.o. Lupa Měšec Podnikatel Root Zdroják DigiZone Slunečnice Vitalia TopDrive KupDnes Navrcholu NovýTarif Dobrý web Weblogy Woko Jagg Computer.cz SK: MojeLinky

Hlavní navigace

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

Aktualizováno 2006-12-04 21:00:00 hod.
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.

Tweetni to Twitter Jaggni to! Jagg Del.icio.us Delicious

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/

Valentýna vyřešíte v našem butiku

Pánové, Valentýn je tu a tak jsme pro vás v našem butiku připravili balíček dámských kalhotek a trička za zvýhodněnou cenu 365 Kč.

       

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?

       

Pavel Chalupa

Pavel Chalupa

Pavel Chalupa je redaktorem zpráviček a příležitostným pisatelem článků na Root.cz.

Školení: SQL pro začátečníky

Kdo nezná jazyk SQL jako kdyby nebyl. Tak lze stručně charakterizovat dnešní význam SQL v IT. Pokud se chcete naučit tento jazyk, tak navštivte naše školení SQL. Školení je určené začátečníkům, a proto se začíná od skutečných základů.

Kromě samotného SQL se účastíci školení seznámí i se základy PostgreSQL, což je databáze, která se díky své shodě se standardem ANSI SQL a komfortem, který poskutuje svým uživatelům, zvlášť hodí pro výuku SQL.

Podrobnější informace a přihláška

Ohodnoťte jako ve škole:
Průměrná známka 3,21

Přehled názorů

díky
Martin Kalenda 4. 12. 2006 00:10
Nový
└ 
Re: děkujeme, odejděte
znechucen 4. 12. 2006 00:36
Nový
 
├ 
Re: děkujeme, odejděte
Martin Kalenda 4. 12. 2006 01:20
Nový
 
├ 
Re: děkujeme, odejděte
Peter Helcmanovsky 4. 12. 2006 15:19
Nový
 
└ 
Re: děkujeme, odejděte
Václav Brožík 12. 12. 2006 12:08
Nový
přístupnost
Vojtěch Látal 4. 12. 2006 00:35
Nový
├ 
Re: přístupnost
me 4. 12. 2006 01:00
Nový
│
└ 
Re: přístupnost
mmm 4. 12. 2006 07:49
Nový
│
 
└ 
Re: přístupnost
Zdenek 4. 12. 2006 08:10
Nový
│
 
 
├ 
Re: přístupnost
vitas 4. 12. 2006 09:39
Nový
│
 
 
│
├ 
Re: přístupnost
binary 4. 12. 2006 11:56
Nový
│
 
 
│
│
└ 
Re: přístupnost
Nosferatu . 4. 12. 2006 13:24
Nový
│
 
 
│
├ 
Re: přístupnost
msk 4. 12. 2006 12:31
Nový
│
 
 
│
└ 
Re: přístupnost
-M&N- 21. 1. 2007 22:26
Nový
│
 
 
└ 
Re: přístupnost
mlicko 4. 12. 2006 10:43
Nový
├ 
Re: přístupnost
narg 4. 12. 2006 11:13
Nový
│
└ 
Re: přístupnost
Petr 4. 12. 2006 11:16
Nový
│
 
└ 
Re: přístupnost
narg 4. 12. 2006 11:32
Nový
├ 
Re: přístupnost
Franta Kučera 4. 12. 2006 18:36
Nový
│
└ 
Re: přístupnost
HKMaly 4. 12. 2006 22:26
Nový
└ 
Re: přístupnost
Pavel 2. 2. 2008 13:29
Nový
Konečné řešení
Zdenek Zikán 4. 12. 2006 00:48
Nový
├ 
Re: Konečné řešení
Pavel Chalupa 4. 12. 2006 04:32
Nový
│
├ 
Re: Konečné řešení
Boris Porosin 4. 12. 2006 08:31
Nový
│
│
└ 
Re: Konečné řešení
Pavel Chalupa 4. 12. 2006 09:06
Nový
│
│
 
└ 
Re: Konečné řešení
Boris Porosin 4. 12. 2006 12:06
Nový
│
└ 
Re: Konečné řešení
Pavel 2. 2. 2008 13:33
Nový
├ 
Re: Konečné řešení
Chlasto 4. 12. 2006 08:26
Nový
└ 
Re: Konečné řešení
Boris Porosin 4. 12. 2006 08:28
Nový
 
└ 
Re: Konečné řešení
Milan Zoubek 4. 12. 2006 08:43
Nový
 
 
└ 
Re: Konečné řešení
Tomas 4. 12. 2006 09:08
Nový
titulek
disorder 4. 12. 2006 00:54
Nový
└ 
Re: GNU/GPL v2 vs v3
Pavel Chalupa 4. 12. 2006 15:48
Nový
 
└ 
Re: GNU/GPL v2 vs v3
disorder 4. 12. 2006 16:14
Nový
 
 
└ 
Re: GNU/GPL v2 vs v3
Pavel Chalupa 4. 12. 2006 17:06
Nový
 
 
 
└ 
Re: GNU/GPL v2 vs v3
disorder 4. 12. 2006 17:23
Nový
 
 
 
 
└ 
Re: GNU/GPL v2 vs v3
Pavel Chalupa 4. 12. 2006 18:02
Nový
 
 
 
 
 
└ 
Re: GNU/GPL v2 vs v3
Libor Chocholaty 5. 1. 2007 11:42
Nový
coze
ja 4. 12. 2006 01:23
Nový
└ 
Re: Moc zdlouhavé
Honza 4. 12. 2006 01:35
Nový
 
├ 
Re: Moc zdlouhavé
? 4. 12. 2006 08:24
Nový
 
└ 
Re: Moc zdlouhavé
HKMaly 4. 12. 2006 22:32
Nový
 
 
└ 
Re: Moc zdlouhavé
Dragh 5. 12. 2006 00:19
Nový
"speciální webový prohlížeč"
Mikuláš Patočka 4. 12. 2006 02:53
Nový
├ 
Re: "speciální webový prohlížeč"
Michal Ludvig 4. 12. 2006 03:21
Nový
│
└ 
Re: "speciální webový prohlížeč"
anonymní uživatel 5. 12. 2006 23:47
Nový
├ 
Re: "speciální webový prohlížeč"
Pavel Chalupa 4. 12. 2006 04:40
Nový
│
├ 
Re: "speciální webový prohlížeč"
fake 4. 12. 2006 19:06
Nový
│
└ 
Re: "speciální webový prohlížeč"
Pavel 2. 2. 2008 13:44
Nový
└ 
Re: "speciální webový prohlížeč"
Milan Zoubek 4. 12. 2006 08:29
Nový
 
└ 
Re: "speciální webový prohlížeč"
Petr 4. 12. 2006 09:07
Nový
Konecne reseni for?
Radek 4. 12. 2006 03:30
Nový
└ 
Re: Konecne reseni for?
Pavel Chalupa 4. 12. 2006 04:46
Nový
 
└ 
Re: Konecne reseni for?
Milan Zoubek 4. 12. 2006 08:38
Nový
 
 
└ 
Re: Konecne reseni for?
Pavel Chalupa 4. 12. 2006 08:53
Nový
 
 
 
└ 
Re: Konecne reseni for?
Milan Zoubek 4. 12. 2006 09:14
Nový
 
 
 
 
├ 
Re: Konecne reseni for?
Pavel Chalupa 4. 12. 2006 09:26
Nový
 
 
 
 
│
└ 
Re: Konecne reseni for?
dejf 11. 1. 2007 11:36
Nový
 
 
 
 
├ 
Re: Konecne reseni for?
Zdeněk Zikán 4. 12. 2006 10:16
Nový
 
 
 
 
├ 
Re: Konecne reseni for?
Stanislav Brozek 4. 12. 2006 14:03
Nový
 
 
 
 
│
└ 
Re: Konecne reseni for?
Radek 4. 12. 2006 16:35
Nový
 
 
 
 
└ 
Re: Konecne reseni for?
Adam 4. 12. 2006 15:44
Nový
dalsi nudny iq/turinguv test?
spammer 4. 12. 2006 06:35
Nový
├ 
Re: dalsi nudny iq/turinguv test?
Stanislav Brozek 4. 12. 2006 14:12
Nový
├ 
Re: dalsi nudny iq/turinguv test?
ludvik 5. 12. 2006 13:38
Nový
│
└ 
Re: dalsi nudny iq/turinguv test?
spammer 6. 12. 2006 00:03
Nový
└ 
Re: dalsi nudny iq/turinguv test?
xyzzy 5. 12. 2006 23:31
Nový
podobnost ciste nahodna?
beda 4. 12. 2006 06:37
Nový
Podekovani
michal 4. 12. 2006 07:32
Nový
├ 
Re: Podekovani
Pavel Chalupa 4. 12. 2006 08:31
Nový
│
└ 
Re: Podekovani
Zdeněk Zikán 4. 12. 2006 10:25
Nový
│
 
└ 
Re: Podekovani
Pavel Chalupa 4. 12. 2006 10:38
Nový
└ 
Re: Podekovani
Michal 4. 12. 2006 20:20
Nový
 
└ 
Re: Podekovani
HKMaly 4. 12. 2006 22:41
Nový
Captcha
kakraholt 4. 12. 2006 08:36
Nový
└ 
Re: Captcha
Eduard DRUSA 4. 12. 2006 09:25
Nový
Jen další varianta Captcha
Petr 4. 12. 2006 09:02
Nový
└ 
Re: Jen další varianta Captcha -> to není Captcha
Pavel Chalupa 4. 12. 2006 09:32
Nový
 
└ 
Re: Jen další varianta Captcha -> to není Captcha
mtd 4. 12. 2006 11:37
Nový
 
 
├ 
Re: Jen další varianta Captcha -> to není Captcha
Stanislav Brozek 4. 12. 2006 14:10
Nový
 
 
│
└ 
Re: Jen další varianta Captcha -> to není Captcha
mtd 5. 12. 2006 10:25
Nový
 
 
└ 
Re: Jen další varianta Captcha -> to není Captcha
AraxoN 4. 12. 2006 14:14
Nový
 
 
 
├ 
Re: Jen další varianta Captcha -> to není Captcha
HKMaly 4. 12. 2006 22:44
Nový
 
 
 
│
└ 
Re: Jen další varianta Captcha ...
lední brtník 7. 12. 2006 19:31
Nový
 
 
 
└ 
Re: Jen další varianta Captcha -> to není Captcha
mtd 5. 12. 2006 10:04
Nový
Konečné řešení...
chaky 4. 12. 2006 09:49
Nový
└ 
Re: Konečné řešení...
Pichi 4. 12. 2006 10:32
Nový
 
└ 
Re: Konečné řešení...
Michal Hučík 4. 12. 2006 10:39
Nový
jde to i bez pruzeni prispevatelu
Mirek 4. 12. 2006 11:19
Nový
Rekneme si to na rovinu
Jirka 4. 12. 2006 11:40
Nový
└ 
Re: Rekneme si to na rovinu
HKMaly 4. 12. 2006 22:47
Nový
 
└ 
Re: Rekneme si to na rovinu
Jirka 4. 12. 2006 23:46
Nový
 
 
└ 
Re: Rekneme si to na rovinu
HKMaly 5. 12. 2006 00:00
Nový
 
 
 
└ 
Re: Rekneme si to na rovinu
GrizzlyNetch 18. 7. 2008 15:40
Nový
Zrušení diskuzí = opravdu konečné řešení
anonym 4. 12. 2006 11:43
Nový
└ 
Re: Zrušení diskuzí = opravdu konečné řešení
HKMaly 4. 12. 2006 22:49
Nový
 
└ 
Technicky řešitelné
anonym 5. 12. 2006 00:50
Nový
 
 
└ 
Re: Technicky řešitelné
HKMaly 5. 12. 2006 23:59
Nový
Denial of Service
Jakub Vrána 4. 12. 2006 11:43
Nový
└ 
Re: Denial of Service - nová verze s kontrolou IP
Pavel Chalupa 4. 12. 2006 12:32
Nový
K čemu vlastně?
MJ 4. 12. 2006 11:54
Nový
jedine riesenie je
msk 4. 12. 2006 12:29
Nový
└ 
Re: jedine riesenie je
AraxoN 4. 12. 2006 14:27
Nový
100% odstraneni spamu nestaci
binaryKlystyr 4. 12. 2006 12:39
Nový
└ 
Re: 100% odstraneni spamu nestaci
JardaP 4. 12. 2006 18:01
Nový
Generovani otazek
trin 4. 12. 2006 12:49
Nový
└ 
Re: Generovani otazek
BrainLess 4. 12. 2006 20:44
Nový
 
├ 
Re: Generovani otazek
HKMaly 4. 12. 2006 22:53
Nový
 
│
└ 
Re: Generovani otazek
BrainLess 10. 12. 2006 23:25
Nový
 
└ 
Re: Generovani otazek
trin 4. 12. 2006 23:29
Nový
no neviem
lobo 4. 12. 2006 13:41
Nový
└ 
Re: no neviem
Dan 4. 12. 2006 22:24
Nový
 
├ 
Re: no neviem
HKMaly 4. 12. 2006 22:58
Nový
 
├ 
Re: no neviem
skaj 16. 12. 2006 16:54
Nový
 
└ 
Re: no neviem
fritzek 28. 12. 2006 03:55
Nový
ty preklepy
hoboj 4. 12. 2006 20:47
Nový
implementace je k nicemu
radekm 4. 12. 2006 21:06
Nový
└ 
Re: implementace je k nicemu
HKMaly 4. 12. 2006 22:55
Nový
Bohatě stačí:
zz 4. 12. 2006 22:57
Nový
└ 
Re: Bohatě stačí:
HKMaly 4. 12. 2006 23:01
Nový
...
kvaz 5. 12. 2006 00:20
Nový
└ 
Re: ...
Honza 5. 12. 2006 10:22
Nový
 
├ 
Re: ...
Pichi 5. 12. 2006 10:38
Nový
 
├ 
Re: ...
Michal Vyskočil 5. 12. 2006 18:59
Nový
 
│
└ 
Re: ...
R 5. 12. 2006 21:18
Nový
 
└ 
Re: ...
Justas 13. 12. 2006 12:49
Nový
antispam
P 5. 12. 2006 12:41
Nový
Anglická klávesnice
DNA 5. 12. 2006 15:46
Nový
nic noveho
nic noveho 5. 12. 2006 16:54
Nový
Asi jsem trotl...
Gringo 5. 12. 2006 20:57
Nový
hm opat novy pohlad
rony 10. 12. 2006 00:50
Nový
uff
P360t 10. 12. 2006 18:09
Nový
mrdanie
anonymní uživatel 27. 12. 2006 13:00
Nový
└ 
Re: mrdanie
dejf 11. 1. 2007 11:52
Nový
dvojita ochrana
dejf 11. 1. 2007 11:58
Nový
└ 
Re: dvojita ochrana
1 19. 4. 2007 02:16
Nový
 
└ 
Re: dvojita ochrana
1 19. 4. 2007 02:17
Nový
       

Tento text je již více než dva měsíce starý. Chcete-li na něj reagovat v diskusi, pravděpodobně vám již nikdo neodpoví. Pro řešení aktuálních problémů doporučujeme využít naše diskusní fórum.

Zasílat nově přidané příspěvky e-mailem