Spam'as komentaruose
Su juo daug kam tenka kovoti. Yra įvairių vaistų, tačiau man labai nepatinka prašyti komentuotojo dar įvedinėti ką nors vien tam, kad patikrint ar jis tikras žmogus. Kolkas mano kovos būdas yra reguliariai keisti Input laukelių pavadinimus, nes spameriai dažniausiai išsisaugo reikalingus parametrus ir po to tiesiog su jais siuntinėja komentarus, taip dauguma jų niekad neišvysta duomenų bazės.
Taip pat visi komentarai, kuriuose yra nuorodų iš pradžių būna nematomi kol jų nepatvirtinu. Jei vartotojai retai rašo komentarus su nuorodom, tai nieko blogo, tačiau nuolatinis komentarų aktyvavimas galėtų tapti labai nemalonia procedūra...
Kartais pamąstau apie kitokius kovos su komentarais būdus ir vienas iš jų galėtų būti toks:
1. Vartotojas parašo komentarą ir jo naršyklėje sausainiuko pavidalu išsaugomi jo duomenys, t.y. vardas ir email'as. (tai daroma pas mane jau seniai...)
2. Jei komentare nebuvo nuorodos, vartotojas "įsimenamas", kaip doras komentatorius. Jei nuoroda buvo, komentaras laukia patvirtinimo. Patvirtinus komentatorius irgi tampa doru :)
3. Vartotojas rašo dar vieną komentarą ir naudoja tuos pačius duomenis (jei iš to paties kompiuterio, tai dažniausiai laukeliai jau būna iš anksto užpildyti, jei ne, jis kogero vėl tuos pačius duomenis suves). Kadangi šis komentatorius yra doras, jo komentarai tampa iškart matomi, nesvarbu ar su nuoroda, ar be jos.
Ar galima tuo piktnaudžiauti spameriams? Sudėtingai tai isivaizduoju, nes visus komentarus vistiek skaitau ir jei išvysčiau spamerių komentarą, kuris "neteisėtai" pateko į puslapį, vartotojas tuoj pat taptų nedoru :)
Taip pat dauguma spamerių siunčia komentarus automatizuotai ir net nežinotų apie technologijas, kurias aš naudoju. Tuo labiau, jie dažniausiai parinkinėja atsitiktinius vardus ir email'us, todėl jie net negalėtų taip lengvai tapti dorais.
Tačiau tai negelbsti nuo duomenų bazę teršiančių nematomų komentarų su nuorodomis, kurie gaunami iš nedorų komentatorių (spamerių). Kas nors turit minčių, ką galima būtų padaryt?
Viena iš idėjų būtų generuoti papildomą nematomą laukelį su tam tikra reikšme, kuri galiotų labai ribotą laiką... Dieną? Valandą? Jos nebūtų galima nuspėti į ateitį... Problema iškiltų jeigu vartotojas pakrautų puslapį ir tik po tam tikro (labai ilgo) laiko tarpo išsiųstų komentarą arba jeigu puslapį pakrautų iš kešo... Nors pasinaudojus META žymėmis ar teisingais HTTP header'iais galima būtų priversti vartotoją nuolat krauti šviežią versiją, o jeigu puslapis ilgą laiką buvo pakrautas, galima būtų dar priimti ir komentarus su paskutiniąją, tačiau jau nebegaliojančia slapta reikšme...
Galvoju taip pat apie kitą papildomą nematomą laukelį... Jame būtų kažkoks ypatingas kodas, priklausantis galbūt nuo vartotojo IP adreso, naršyklės ar kitų parametrų. Taip aš galėčiau gavęs komentarą tikrinti, ar komentaro siuntėjas yra tas pats, kuris prieš tai krovė puslapį... Na žinoma reikėtų tiesiog griežtai filtruoti mėginimus rašyti HTML kodą į komentarą (daugelyje spamo komentarų jo yra). Jei vartotojas rašytų HTML'ą - pats kaltas. Tačiau jam galima būtų apie tai pranešti Javascripto pagalba...
Beje Javascript! Taip pat idėja būtų generuoti komentarų form'ą dinamiškai su Javascript. Tokiu būdu dauguma spamerių tiesiog nerastų automatiškai analizuodami kodą.
Realiai beveik visos idėjos tinka tik tiems atvejams, kai spameriai analizuoja kodą automatiškai, nes jeigu įsigilintų, ką aš darau, tai galbūt gana greitai surastų išeitį...
Tai vat... Surašiau galvoje skrajojančias mintis. Galėsiu vėliau dar daugiau pamąstyt arba galbūt kam nors iš mano skaitytojų kils dar kokia gudri mintis.
P.S. Dar yra alternatyva naudoti rel="nofollow", tačiau apie tai aš irgi neigiamos nuomonės. Ir ne tik aš - štai vienas neblogas straipsnelis pamąstymui... Tuo labiau, jog aš ne dėl pagerank'o kovoju, o dėl švaraus blogo, t.y. man kenkia ne nuorodos į blogus puslapius, o apskritai negeri komentarai...
Sukurta: 2006-06-26 22:50:08 UTC
Žymės:
mano blogas, spamas
Komentarų: 17
Panašūs įrašai
- Spam'as komentaruose #2
- 8 metai ir 3 dienos
- 7 bloginimo metai
- Tomas.Markauskas.lt On Rails
- Nedideli sutrikimai
- Atsinaujinau
- 6 metai
- 30 metų spam'o
- Mano naujas RSS ir nedidelis prašymas
- 5 metai
Komentarai
vytas911
2006-06-27 05:52
dar galima bandyti tikrinti pagal raktinius žodžius... kaip ne kaip spamas dažniausiai eina su tam tikrais pasiulymais... vienoje vietoje kur ir man atsibodo trinti spamą idėjau statinį paveiksliuką su iškraipytais skaičiais, mol žmogus turi suvesti.. sakau, bent kuriam laikui užteks :) šiaip visgi 99 atvejais iš 100 spamas yra automatinis, taigi tinka praktiškai visi būdai...
Sepa
2006-06-27 10:56
Kadangi spammeriai būna labai godūs, ir deda daugiau negu vieną nuorodą savo spam-komentaruose, tai aš pas save ant WP uždėjęs moderavimą komentarams, kuriuose yra dvi ir daugiau nuorodos. Kolkas spam'as pakliūna 100%, tik kartas nuo karto reikia pratrinti moderuojamų komentarų sarašą. Jei netyčia bus ir gerybinis komentaras tarp tų moderuojamų pakliuvęs, tai jis iš karto matosi.
Tai va, tokios ir apsaugos... ;)
Sepa
2006-06-27 11:04
Dabar pastebėjau - jau kuris laikas (2-4 savaitės) dingo išvis spamas. Arba tyla prieš audrą, arba pastebėjo, kad niekas iš mano kuklaus tinklapio į jų nuorodas nekreipia dėmesio...
Karolis
2006-06-27 11:29
JavaScript'as tikrai nėra išeitis. Yra vartotojų, kurie jo nenaudoja (javascript išjungtas arba naršyklė jo išvis nepalaiko), taigi gali prarasti (kartais) labai naudingą komentarą vien dėl to.
WordPress'o naudotojams yra labai neblogas įrankis spam'ui atsijoti - Spam Karma 2, tikrai patariu jį naudoti. Nuo naudojimo pradžios (naudoju tik kokį mėnesį ar du) Spam Karma sugavo beveik penkis tūkstančius spam komentarų. Beje, praleido visus "geriečius" (komentarus be spam'o). Yra galimybė peržiūrėti visus komentarus (jeigu netyčia Karma jį pažymės kaip "blogietį", galėsite jį patvirtinti ir parodyti savo blog'e). Taip pat yra ir juodasis sąrašas - komentarus iš žmonių/robotų, esančių tame sąraše, Karma automatiškai pažymi kaip spam'ą ir jo nepraleidžia į tinklapį.
Šiam kartui tiek,
Karolis.
tamole
2006-06-27 11:30
Aš kai paskutinį kartą pervadinau input laukelius, tai vienas spam'as po poros dienų praslydo ir nuo to laiko daugiau nieko negirdėti...
Moderuojami komentarai yra gana gerai, bet tiesiog vargina reguliariai trinti.. Tikrinimas dėl 2 ir daugiau nuorodų irgi yra geras dalykas, retai kada žmonės tiek rašo, o galima juk ir dar daugiau leisti, pvz. iki 3 nuorodų praeina tiesiogiai, nes kaip jau minėjai, spameriai yra godūs...
Tačiau labiausiai mano mintys sukasi ta linkme, kad reikia neprašant žmogaus nieko įvedinėti ar pan. tikrinti, ar tai gali būti spamas, t.y. filtruoti HTML, sekti naršyklės nustatymus ir galbūt parizikuoti žaisti su Javascript, bet nelabai noriu...
Dar galima būtų su Javascript padaryti, jog naršyklėje Javascript'as pamodifikuotų formos laukus ir jei vartotojas neturi Javascript, tai tiesiog tada būtų siunčiami duomenys ir jie atidžiau tikrinami, o tie, kurie praėjo Javascript testą ar pan. būtų kaip ir privilegijuoti ir ne taip žiauriai elgiamasi, jei komentare yra nuoroda ar pan.
Aidaz
2006-06-28 08:58
O ne paprasciau sugeneruoti +1 field'a su kokiu nors dienos stringu: {(2006+06+28)*06*28+2006-06*28 + kas nors su ip digits}
ir vsio.
Jei sitas field'as yra postinant - OK
Nera - BAD
tamole
2006-06-28 09:13
Aidaz, aš tavo variantą ir minėjau jau, tačiau teoriškai galėtų iškilti problema, jei puslapis per ilgai buvo laikomas atidarytas, tada ir tas laukelis turės senesne reikšmę... Tuo labiau spamas be problemų praeitų, jei jis buvo siųstas neseniai po to laukelio generavimo...
ef
2006-07-02 10:37
Hmm... o gal addinti kelis checkboxus apačioje ir parašyti: "pažymėkite pirmą ir trečią" (na, žinoma, čia būtų sugeneruojami atsitiktinai).
Žmogui neturėtų būti per daug sunki užduotis ir neužimtų per daug laiko, o bot'ai nepraeitų.
Man atrodo, šitą įvedinėti lengviau nei captchas. ;)
tamole
2006-07-02 15:10
Taip, lengviau, bet mano tikslas yra išvis jokiu papildomų laukų, matomų vartotojui...
Linas
2006-07-04 16:44
O man JavaScript neatrodo taip blogai. Jo išjungimas jau yra ta riba, kai dėl websaito neveikimo kaltas nebe webmaster'is, o pats vartotojas. Galų gale, JS nepalaiko turbūt tik Lynx.
Galima užsikrovus puslapiui su JS įrašyti cookie ir, išsiuntus komentarą, jį patikrinti iš serverio pusės. Jeigu cookie nėra, komentaras eina į moderated.
Captcha (vienkartinis) irgi nėra taip jau baisu :)
Arturas
2006-07-04 16:48
Kitas variantas butu:
visiems input lauku pavadinimams generuoti randomi prefiksa. Ta randomi prefiksa istatyti i hidden input lauka, kad saugant duomenis zinoti is kur pasiimti juos.
tamole
2006-07-04 16:49
Sutinku, kad webmaster'io kaltinti dėl Javascript'o nebuvimo nereikėtų, tačiau aš norėčiau, kad ir pačiam vartotojui nereikėtų jaustis kaltam.
Su Javascript dėti sausainį irgi nebloga mintis :)
tamole
2006-07-04 16:51
Random prefix'as visai įdomiai skamba... Galima būtų paįvairinti daugmaž taip, kad prefix'as būtų pvz. pirmi 5 simboliai md5 hash'o, kuri sudaro kažkoks spec. hidden input laukas bei koks nors vartotojo parametras (pvz. IP)
Aidaz
2006-07-06 03:22
Tamole, pratesiant "Aidaz | 2006-06-28 10:58:42" irasa, kaip assuprantu: 1. spameris turi paziureti tavo forma ir susirinkti formos parametrus. Ar kazkaip kitaip? 2. Mano mintis buvo, kad vienas is formos fieldu'u yra _nuolat_ kintantis pavadinimas, kuris generuojamas tik pagal tau zinoma logaritma. 3. Spamer'iui reikes issiaikinti, kas tai per filed'as ir ka browseris turi grazinti serveriui, o tai imho jau bus jam labi komplikuota.
tamole
2006-07-06 05:24
Aidaz: taip, tu visai teisus, tai praktiskai yra labai neblogai, tiesiog reikia uztikrinti, kad kol vartotojas neiveda komentaro, t.y. ilga laika pakrautas psl., tai gali atsitikti taip, kad ta sugeneruota reiksme tiesiog ims ir pasens... Bet su tuom galima susitvarkyti manau be dideliu problemu...
godgard
2006-07-20 22:16
kiek teko domėtis anti-spamu, tai šitas sprendimas visai patiko -- http://www.thinkingphp.org/2006/07/05/remember-the-days-before-spam-a-cakephp-model-for-akismet/

2006-06-27 05:03
Aš tai radau ganėtinai žiaurų sprendimą, bet spameriai dažniausiai išvis e-mail'u nepasirašinėja :-) O manęs žmogus kuriam negaliu atsakyti ir neitin domina.
Dar galima analizuoti ateinančią HTTP informaciją. Vien pagal ją apie spamer'ius info galima rasti. Dažniausiai spamina du broliai bulgarai :)