spam: no de most már aztán...

A honlapom vendégkönyvébe egyre sűrűbben érkező spam miatt lépni kányszerültem, elvégre csak nem törölhetem ki a spamet napi ötször...
Szokásomhoz híven nem kész megoldást választottam, ennek több oka is volt:

  • szeretek tapasztalati úton tanulni. Inkább használom a saját pocsék spamszűrőmet, ha az átcsúszó spamek alapján taníthatom utólag. Mivel saját honlapra kerül, nem muszáj elsőre tökéletesnek lennie.
  • a saját kódomban bízok meg, akkor is, ha sokak szerint az olyan amilyen:)
  • rég gányoltam phpban.

Főként az első okból kifolyólag a jelenlegi szűrő a dolgok jelentős részét átengedi, Ugyanis eddig látszólag 2 jól beazonosítható spamforrás találta meg az oldalt, elég volt első körben rájuk szabni...
Hallottam erről a pontozásos rendszerről, jujdejó, csináljnk valami olyasmit.
Egy másik tyűdetitkos vendégkönyv spamszűrőt visszafejtettem (kódolva is volt ám), ötleteket kutatva. Az kikereste a hozzászólásokból az urleket, és azokban keresett szövegrészeket. Bizonyos szavakra megemelte a pontszámot (milyen kreatív...). Továbbá megszámolta a POST változókat, azt én is beépítettem...

Viszont az oldallal ellentétben nem csak növelő faktorokat vettem számításba, ugyanis ami spamet eddig kaptam, egyik sem alkalmazott ékezetes betűket. Tehát nálam minden ékezetes betű csökkenti a pontszámot. Tökjó, amíg rá nem jönnek:)
Nálam minden linkre (nem urlre, javítandó....) ugrik a pontszám, néhányra meg különösen (a jól beazonosítható források miatt ezt el lehetett játszani...)

Ja... És még egy lényeges különbség a példascripttől: valami heurisztikus ötlet folytán nálam a pontszámot nem megnöveli egy biz. számmal, hanem megszorozza. Azért mert csak.

A dolog tanulsága kb. annyi, hogy ha tökjól be tudjuk határolni a spamlevelek természetét, egy elég primitív algoritmus is segíthet.

... egy ideig. Majd ha megint kezdenek átcsúszni, fejlődni fog ez még:)

Hozzászólások

Az hülyeség ha input mezők nevét és a várt változót megtoldjuk egy időintervallumon_belüli_rnd() karaktersorral?

mármint úgy érted, hogy - leegyszerűsítve:
$hozzaszolas = $_POST['hozzaszolas' . get_randomstring_from_time()],
ahol az a hülye függvény mondjuk félóránként értéket vált? Jó elgondolás, gyk. manualizálja a dolgot valamilyen szinten a spammer számára.

Másik lehetőség a javascripttel utólag eltűntetett, spambot számára félrevezető nevű inputfield, pl. subject...
mivel más nem látja, cska a spambot tölti ki... ezt a weblaboron láttam:)

int getRandomNumber() {
return 4; //szabályos kockadobással választva. garantáltan véletlenszerű.
} //xkcd

Nekem bejött a manuális inputmező átírása random névre. Időnként jön egy random karakterekkel próbálkozó teszt, aztán ha sikerül a teszt, csak postolni akar a hülyéje. Plusz még olyat is csináltam egyszer hogy csak a kommentelő ipjéről látszott a komment, jóváhagyás előtt. De kézzel szelektálni talán bosszantóbb mint hülye inputneveket választani. Jó a siged. :) (és még igaz is, mert egy elég hosszú sztringből daraboltam le mindig három betűt a unix timestamp utolsó 3 számjegye alapján, ezt a sztringet meg kézzel csapkodtam be... :)

Sok hulye van, aki azt hiszi, a kikapcsolt javascript miatt nagyobb biztonsagban van, vagy egyeb okbol kikapcsolja, aztan ha valahol nem mukodik anelkul az oldal, csak akkor engedelyezi. A javascript-mentes bongeszoket hasznalok meg nyilvan nem fontosak.
Szoval meg lehet szivatni ezzel a botot, de akkor mar legalabb css-bol is tuntesd el azt az inputmezot, meg noscript koze tegyel egy emberek altal emesztheto szoveget, hogy semmikeppen ne toltse ki.
---------------------
Aki masnak vermet as, az a Stack Pointer.

ebből azt következik, hogy a formot is javascriptből kell felépíteni:D:D nem csak a botok nem látják úgy, de még a js nélkül böngészők sem, tehát ez a problémaforrás kilőve:D
A css-t szerintem nézik. Cssben kevesebbféleképp lehet eltüntetni valamit, mint javascriptben, emiatt picit szkeptikus vagyok.

int getRandomNumber() {
return 4; //szabályos kockadobással választva. garantáltan véletlenszerű.
} //xkcd

Eléhelyezel egy divet, és a botok is át lesznek verve. Csak olyan divet kell eléhelyezni, ami jól is fog mutatni. :)
Kb így:

<form type="text" style="width: 100px;"><div style="position: relative;left: -100px;width: 100px;height: 20px;background-color: red;">Ide berakhatod a normásik formot is, úgy még jobb. És még a háttérnek sem kell pirosnak lennie. :)</div>

És ha finomítani akarsz még, akkor a z-index-et kell módosítani. De az szerintem alapból jó.

Hozzaszolaskor captcha?
Aztan - hogy ne legyen tul idegesito - letarolod session-be, hogy nem robot. Igy csak egyszer idegesited vele a latogatot, amig el nem maszik az oldaladrol.

Random mezonev azert nem jo, mert ha egy picit ertelmes robot teved az oldalra, akkor ugyis letolti hozzaszolas elott az oldal forrasat, elemzi, es a default ertekeket atirva visszakuldi. Annyiban segithet, hogy nehezebben jon ra a robot, hogy vendegkonyvrol van szo, de ha mar rajott, nem er semmit. (irtam mar par botot, bar nem spammelesre)
URL szurest pl: anonym.to, hardcoded ip cim, %hh formatumu url siman kikeruli.
---------------------
Aki masnak vermet as, az a Stack Pointer.

A randomizacio foleg akkor ertelmetlen, ha csak megtoldod vele a mezonevet.
Most mennyivel bonyolultabb azt felismerni, hogy: 'message_content_vfdxz', mint azt, hogy 'message_content'? Szerintem ugyis regexp van rajta. A tobbi meg az oldal szerkezetebol latszik (bar kevesbe biztos).

---------------------
Aki masnak vermet as, az a Stack Pointer.

captchatrésről olvastam egy cikket régebben... nem emlékszem hol, csak arra, hogy nem értettem meg a dolgot. Aszerint vigyázni kell vele, nomármost én olyat nem tudok.

Ha nagyon kellemetlen lesz a dolog, akkor tényleg kacsa lesz belőle, de azzal most nem akarok nyűglődni - majd ha látszik, hogy kikerülhetetlen...
Nem egy enterprise-grade vendégkönyv, nem akkora a felelősség...

int getRandomNumber() {
return 4; //szabályos kockadobással választva. garantáltan véletlenszerű.
} //xkcd

Ha már előkerült a téma: spammer robotok ip-cím gyűjteménye kell-e valakinek? Lehet-e azzal kezdeni valamit? Ugyanis van egy régen elhagyott oldalam, amin a vendégkönyvbe a spambotok szépen szórják befele a spamet. Csak én szemét módon eltárolom a spambot ip címét is. :)

Egyébként a captcha a legjobb megoldás szerintem is.

Egy gyakori trükk vendégkönyvekbe, hogy a bbcode-ot és a html-t keverve küldik be az url-eket. Ezeknek az azonosítására a következő regexpet használom:
(?:href(?:.|\n)*\[url|\[url(?:.|\n)*href)
Elég sok spamet ki lehet vele szűrni.

--
HUP Firefox extension

no ennyire azért nem ástam még bele magam a regexpbe:)
nálam nem voltak keverve, viszont szerintem az a módszer, hogy a csak urlt küldőket visszadobjuk, alacsony hibarátával működik

mondjuk tényleg nagyon erősen támaszkodom arra, hogy vendégkönyvem nyelve magyar: minden normális bejegyzésben van néhány ékezetes betű, és ékezetes betű 5%-kkal csökkenti a pontszámot. Apróságnak tűnik, de a tesztek során igen hatékony volt.
ennyi az egész:


	$a = preg_replace(array(
		"/([űáéúőóüöíÍŰÁÉÚŐÓÜÖèàêâîôì])/ei",
	),
	array(
		"polling(0.95)",
	),
	$str);

kezdek rájönni, hogy a magamfajta lustáknak micsoda megváltás az 'e' kapcsoló:D

int getRandomNumber() {
return 4; //szabályos kockadobással választva. garantáltan véletlenszerű.
} //xkcd

az ékezetes betűknél felismeri a regex modul a nagybötűs párját?
az az i ott fölös valóban annak alapján... No csak azért mondom, hogy okkal van felsorolva mindkettő;)

int getRandomNumber() {
return 4; //szabályos kockadobással választva. garantáltan véletlenszerű.
} //xkcd

Ez sem komoly :)
Mint láthatod, van benne egy szép hosszú regexp, amit évek alatt eszkábáltam össze egy vendégkönyvből, hasonló módon. Captcha-val meg ezzel így egész jól teljesített az
utóbbi napokban. Összesen 1 spam jutott át. Remélem, találsz benne hasznos dolgot is :)
* A fals pozitív találatokról nincs információm
--
HUP Firefox extension