Spam, spam, spam. Už jsem tu o něm psal. Snažíme se bojovat dvěma způsoby a zdá se, že to funguje. Bohužel se občas objeví problémy, ale vy nám s nimi můžete pomoci.
Už v létě jsem tu psal jeden rozhořčený článek, kde jsem se vyznal ke svému (temnému a zápornému) vztahu ke všem těm spammerským… však víte. Od té doby jsme začali intenzivně bojovat a to dvěma způsoby: jednak blokujeme IP adresy a nově také blokujeme klíčová slova. V případě IP adres jsme nuceni blokovat celé rozsahy (obvykle poslední bajt, někdy jsou třeba dva!), protože spammeři zjevně vlastní velmi často celé bloky adres a blokace jedné je naprosto neúčinná a okamžitě začne chodit spam z jiné, která je třeba hned vedle. Tenhle postup se ukázal jako velmi účinný a objevuje se jen minimum problémů (vlastně se ozval jen jeden člověk, kterého blok postihl – okamžitě jsme ho s omluvou upravili).
S nápadem blokovat klíčová slova přišel Martin Malý, který něco podobného kdysi nasazoval na Bloguje.cz a zkušenosti prý byly vynikající. Stačilo zvolit asi dvacet blokovaných slov a z desítek tisíc spamů denně padl počet na několik málo kusů. Jelikož u nás se taky velká část slov nebo adres opakuje, ukázalo se to jako velmi dobrý nápad. Nasazeno to bylo někdy ke konci roku a to už jsme měli předem vytvořený seznam několika desítek slov, která jsme naplnili. Výsledek se dostavil velmi rychle, spamu opravdu výrazně ubylo, pořád sledujeme všechny diskusní příspěvky (a že jich je), ale spam je už výjimečný. Postup při zachycení je ale stejný: zabanování IP rozsahu plus vytipování klíčových slov a jejich blokace.
Bohužel blokace slov přinesla i problémy, jak ukázala naše redakční schránka. Občas se totiž objeví falešně pozitivní příspěvek, který je odeslán do /dev/null
. Problém je v tom, že některá anglická slova (třeba název farmaceutického přípravku Cialis) nám kolidují s českými slovy (tady třeba Socialismus) a formulář vám pak zabrání v odeslání. Nechali jsme si proto doprogramovat možnost, která dovoluje vypnout u konkrétních slov jejich „rozšiřování“ a pak se za slovo „Cialis“ bere skutečně jen tento tvar a jakákoliv změna pak už znamená jiné slovo a filtrem projde.
Tak či onak potřebujeme tuhle funkčnost ladit, hlavně kvůli kolizím slov nejen českých, ale i anglických. Třeba velmi oblíbené slovo „lease“ se nám sráží s „release“, což je na Rootu docela často používaný výraz. Potřebujeme to tedy poštelovat tak, aby se v běžných českých příspěvcích problémy pokud možno nevyskytovaly.
Co tedy dělat, pokud vám systém odmítne vložit regulérní příspěvek? Můžete se pokusit zjistit slovo, které se mu nelíbí pomocí odmazávání částí příspěvku. Prostou metodou půlení intervalu na něj přijdete a můžete jej změnit. V každém případě nám ale napište do redakce (mail je redakce zavináč root.cz) a konkrétní problém nám ohlašte, abychom mohli udělat zásah do filtrů. Pokud se vám klíčové slovo hledat nechce, prostě zkopírujte text celého neodeslatelného příspěvku do mailu a pošlete nám ho.
Poznámka na konec: ta klíčová slova nikde nezveřejňujeme, abychom tím nenahrávali spammerům. Pokud by se nad formulářem objevilo „nelíbí se nám tato slova:…“, mohli by (dnes často lidští) spammeři svá slova začít upravovat. Ale vězte, že se jedná o typická spamovací slova jako „rolex“, „replica“, „lacoste“ (velmi oblíbené) a podobně. Takže za normálních okolností byste je v textu opravdu použít neměli.
[3] Bylo by to samozřejmě lepší, ale takové kombinace se tam obvykle nevyskytují. Dnešní typický komentářový spam jsou dvě tři odněkud zkopírované věty doplněné o jedno nebo dvouslovný odkaz. Málokdy se celý komentář opakuje. Jedinou šancí je tedy vychytávat jednotlivá slova. Někdy jsou typická (třeba ten Rolex) ale někdy už tolik ne.
A nebo by to šlo ještě trochu jinak. Pokud by měl odesílatel českou IP, spam filtr by se neaplikoval. Případně ještě udělat něco jako "seznam ověřených lidí". Pokud by někdo odeslal klasický (a nespamový) příspěvek, jeho email by se dostal do "white listu" a takové příspěvky by opět vůbec neprolezli skrz spam filtr.
Myslim si, ze podobnymi problemami sa zaoberaju mnohe bakalarske, ci diplomove prace. Preco ich nevyuzit? Namatkou si spominam na naivne bayesove filtre. Timto smerom ste sa nepozerali?
PS: zaujimave by bolo mozno i vygenerovat mail na zaklade komentara a ten nechat ohodnotit spam assasinom a pozriet sa i na jeho skore. Co vy na to?
[5] Nasazení geolokace pomocí IP je další možností. Zvažovali jsme ji, ale zatím nenasadili. Určitě je ale další v pořadí, pokud se objeví nějaké nové problémy se spamem.
[6] Problém je, že tyhle filtry už dneska moc nefungují. Právě proto, že spam je často generovaný člověkem a často kopírovaný z nějaké jiné části webu. Jedná se tedy na první pohled o regulérní komentář, který je zkopírovaný z jiné diskuse, ke kterému je "náhodou" na konci připsáno "Kupte si Viagru". Zvažovali jsme i nasazení placeného Akismetu, ale zatím blokace IP a klíčových slov stačí.
Je nutne aplikovat filtr podle klicovych slov i na registovane uzivatele? U delsiho prizpevku je metoda eliminace pomoci puleni intervalu dost otravna. Nedavno jsem nemohl poslat prizpevek a at jsem koukal, jak jsem koukal, nic, co by bylo podobne spamerskym vyrazum, jsem nevidel. A kdyz uz chcete, aby vam lidi posilali prizpevky, ktere neprojdou, tak by treba nebylo spatne, kdyby je mohli poslat primo z formulare, treba tlacitkem s captchou, ktere by se objevilo po pokusu o odeslani soucasne s hlaskou o tom, ze podezirate spam. Posilat to mailem je pakarna, zejmena, kdyz mail nemam k dispozici na kazdem pocitaci, ze ktereho lezu na Root, webmail nenavidim a ani si k nemu nepamatuji heslo.
[8] Nápad logický, ale nefunkční. Boti jsou dneska schopni se registrovat, CAPTCHA proti nim dávno nezabírá. Takže část spamu přichází i od registrovaných uživatelů. Boj s falešnými registracemi je stejně problematický jako boj se spamem v komentářích. Navíc uživatelé ječí, když vymyslíte nějakou sofistikovanou ochranu (třeba odpovědi na české otázky v našem fóru).
Napadá mě k [8] a [9]: Mohli bychom přeci k hlášení "Příspěvek obsahoval zadaná slova, pošlete jej do redakce" přidat tlačítko "Poslat jej do redakce" - proč by měl uživatel něco kopírovat, otvírat si mail, hledat adresu redakce a posílat to; udělat "send" tlačítko je naproti tomu banalita, co ušetří práci a sníží onu "mez iritace".
[14] Ty důvody jsou v zásadě dva: zaprvé CAPTCHA je možné lámat pomocí pokročilých OCR, takže se obecně zvyšuje složitost obrázků, což vede k paradoxní situaci, kdy obrázek přečte robot, ale člověk ne.
Zadruhé dneska často CAPTCHA luští najatí reální lidé, kteří i velmi často přímo ručně vkládají spam. Proti takovému postupu je velmi těžké se jakkoliv bránit.
V každém případě praxe prostě ukazuje, že CAPTCHA je jako ochrana proti spamu naprosto neúčinná. Spammeři přes ni naprosto bez problémů procházejí.
zkusenost z provozu jednoho phpBB fora:
1. "spammeři zjevně vlastní velmi často celé bloky adres" = to je typicky normalni komercni webhosting, na kterem bezi jednoducha proxy v php pres kterou ten komentarovy spam tece. Reseni - kontrola v ARIN/RIPE/LACNIC/APNIC a blokace plosne podle netmasky, tj. jemneji nez "obvykle poslední bajt, někdy jsou třeba dva".
2. jedna dost provarena aplikace na spamovani for je rusky X R u m e r (http://en.wikipedia.org/wiki/XRumer) takze se da opatrit kopie na testovani ucinnosti filtru
a) blokování podle klíčových slov se mi nelíbí. false positives se vůbec nedivím.
b) líbila by se mi textová "captcha", při které člověk musí přemýšlet a třeba si i něco zjistit na internetu. Např.: "Ve kterém roce bylo B. Němcové 10 let?" + odkaz na wikipedii.
Případně i nějaká logická jednoduchá hádanka; třeba by to omezilo TurZiny a podobné vypatlance :-)
c) blokování podle GeoIP PROSÍM NE! člověk občas vyjede do zahraničí (třeba i do nějaké "exotiky") a pak by to byl dost velký vopruz.
d) co třeba mít u každé uživatele nějaký čítač, který by se mu nastavil ve chvíli, kdy např. odešle 10 smysluplných komentářů a teprve poté ho už nijak nekontrolovat? (tj. pochopitelně pokud nezačně dělat bordel?)
[19]
a) Přesto je to očividně velmi účinné. Kontrolujeme teď slova ve filtru podle českého slovníku (z aspellu), takže by false pozitives měly být minimální.
b) Takto složitou kontrolu by čtenáři nepřežili. Vadí jim i prosté "Který měsíc je v roce čtvrtý?" ve fóru.
c) Nebylo míněno "budeme vyhazovat cizince", ale spíš že by se dala selektivně zpřísnit kontrola. Třeba pro ne-čechoslováky nasadit nějakou tu složitější kontrolu navrženou v b). Ale zatím nic takového neplánjeme.
d) Kdo je to uživatel? Podle čeho ho poznáme? To by bylo možné v případě povinných registrací a to zavádět zatím nechceme.
Selektivní přístup podle GeoIP je dobrý nápad. Podle mě by se lidem, kteří píší z České republiky (a Slovenska a možná i střední a západní Evropy) mohlo odpustit neustálé vyplňování "hádanek". Coby Češi a Slováci máme nevýhodu, že se svým jazykem nikde nedomluvíme a teď je možné z toho udělat výhodu.
Co tlacitko "spam" vedle prispevku, na ktere by stacilo kliknout ze trech(priklad) ruznych IP adres a prispevek by byl automaticky smazan? Samozrejme doplneno permisivnim spamfiltrem(s nestoprocentni uspesnosti) a treba odstranenim tlacitka u prispevku dlouhodobych registrovanych prispivatelu?
[22] Naprosto neprůchozí. To tlačítko tam teď je a funguje jen jako oznamovač. Ale je velmi často zneužíváno k označení "nepopulárních názorů". Někdo třeba v celkem rozumné debatě napíše: "No, já zůstávám u MS Office, protože toho umí daleko více ne OpenOffice.org." a během půl hodiny na tlačítko "spam" klikne dvacet lidí. Takže tudy by to opravdu nešlo, masa by zlikvidovala i regulérní názory.
Ono je celkove (temer) nemozne se spamem vyhrat. Neni spatny napad tarpitting (zablokuje se IP napr. na 10-30 sekund po N >= 5 pokusech, kde bayesian detector hlasi velkou shodu). Vystup z toho bayesian filtru se pak da pouzit jako koeficient k zablokovani jinych IP, odkud pochazi spam (znizi se pocet pokusu pred zablokovanim apod).
Neni nutne ani drzet vsechny IP v DB, dobry napad na tohle je Bloom filter (par false positives nevadi, nebo jako "odcitaci" ze bude davat false negatives, trocha spamu projde, ale nebude to tak strasny).
Vsechny spamy se da zapamatovat v necem jako rainbow tables (to se ale dlouho pocita) nebo jine pravdepodobnostne strukture, taky to neco odfiltruje.
BTW ani slovna captcha nezachrani, Wolfram Alpha umi tu anglickou celkem obstojne resit (a je jen otazkou casu nez nekdo naimplementuje cesky solver).
(idealni by bylo dat tam ukol vyresit Navier-Stokes rovnice, ale to je asi trocha kanon na vrabce ;-))
Bych se mozna celkem rad podilel na implementaci. Nebude to uzasny, skvely a vyhezkany (ale ale aspon neco).
Lze dokazat, ze uplne vyhrat nelze (zeptej se O. Bojare, ten me naucil proc). "Nereknem, ze neumime, ale reknem proc nemuzem vedet tuhle konkretni instanci.";-)
I wish you good luck :-)
blokace slov by šla třeba použít v kombinaci s analýzou jazyka, ve kterém je příspěvek napsaný (příklad http://whatlanguageisthis.com/ ). V případě že by byl příspěvek český, nemusela by být úroveň blokace tak vysoká. třeba.
[33] Priznavam ze takove otazky nemam. Osobne na blogu pouzivam Akismet a funguje to bajecne, obcas se divim ze rozpozna jako spam i komentare u kterych bych mozna chvilku vahal. A false positives jsem tam taky nezaznamenal. Ale je fakt ze muj statisticky vzorek je proti rootu zanedbatelny.
mnbo, musim rict ze jsem ted narazil na zajimavou ochranu: hidden captcha.
proste je ve formulari jeden falesny input s napisem: toto pole ponechte prazdne. toto pole je skryte pres CSS. pokud je formular vyplnen i s timto polem pak je to spam protoze clovek to pole nevidi, pokud si zvladne vypnout CSS tak zvladne pochopit co je tam napsane. pokud je to ind tak si neprelozi "sem nic nevypisujte"
zatim to nemam prakticky ozkousene, ale princip je podle me velmi genialni.
[35] Mohu potvrdit, že to geniální je. Falešný input používáme již několik let a spam je roven skoro nule.
Jinak k řešení captchi. Nedávno jsem se tím zabýval a neexistuje nástroj, který by ji uměl spolehlivě řešit. Takže pokud někdo tvrdí, že ano, jsou to bláboly. Problém je totiž hlavně v tom, že písmenka jsou moc malá na to, aby se daly stoprocentně identifikovat. Krom toho je dost často nutné solver učit na konkrétní sadě a to taky není úplně triviální. Mimochodem většina solverů na netu je samozřejmě podvod pro důvěřivce ;)
Když to má být "odpověd, která je: jednoznačná, bez diakritiky a ještě česko-slovensky." tak zkuste číselné odpovědi. Mě se osvědčilo úplně obyčejné "kolik je 27 a 3", dokonce ta čísla ani neměním... v případě potřeby lze čísla měnit nebo větu měnit, např. "jaký je výsledek součtu" atd.
Petr Krčmář pracuje jako šéfredaktor serveru Root.cz. GNU/Linuxem a Unixem obecně se zabývá již více než deset let a věnuje se především jeho nasazení v počítačových sítích a bezpečnostní politice. Zde bloguje o Root.cz, Linuxu, internetu a světě kolem sebe.
Přečteno 112 285×
Přečteno 89 762×
Přečteno 73 157×
Přečteno 58 108×
Přečteno 54 434×