Na navigaci | Klávesové zkratky

Texy! proti komentářovému spamu

S komentářovým spamem se na La Trine prakticky nesetkávám. Lví podíl na tom má funkce náhled komentáře, jejímž vedlejším efektem je odrazení spamerů. Takže konkrétní podobu spamů příliš neznám, ale tipuji, že většinou půjde o pouhé shluky odkazů. Je to tak?

Pokud formátujete komentáře pomocí Texy!, pak by se vám mohla hodit následující finta. Texy všechny odkazy, na které při formátování narazí, zapisuje do sumáře. A je jedno, jestli byl odkaz zapsán HTML značkou <a href> nebo Texy syntaxí.

$texy = new Texy;
$html = $texy->process($text);

// seznam odkazů
$links = $texy->summary->links;

// pozor - pro verzi 1.2 a novější je to
$links = $texy->summary['links'];

print_r($link);

Takže po zformátování komentáře se mu můžeme podívat na zoubek a zjistit, zda-li nejde o spam. V praxi by nejspíš stačilo omezit počet odkazů v komentáři…

if (count($links) > LINK_LIMIT) ...

…případně stanovit nějaký rozumný poměr mezi délkou textu a počtem odkazů…

if (strlen($text) / count($links) < LINK_RATIO) ...

…nebo dokonce jednotlivé odkazy analyzovat.

foreach ($links as $url)
{
	if (...)
}

Ale to už je jen na vás 🙂

před 18 lety v rubrice Texy! | blog píše David Grudl | nahoru

Mohlo by vás zajímat

Komentáře

  1. Bohumír Bednařík (BoboCop) #1

    Jedinná účinná metoda proti komentářovému spamu je zrušit komentáře. Všechny ostatní příklady nejsou a nikdy nebudou stoprocentní.

    před 18 lety | reagoval [2] Tomáš
  2. Tomáš #2

    #1 Bohumíre Bednaříku (BoboCop), Vždyť se tady taky nebavíme o 100% vychytání něčeho. Lidé, nucení odmazávat denně desítky SEO spamů jistě takové funkce ocení.

    před 18 lety
  3. peCan #3

    avatar

    Já používám JS ochranu a za skoro půl roku jsem měl jeden jediný spam v komentářích – asi ho napsal člověk ručně. Před tímto řešením jsem jich měl denně desítky. Vřele doporučuju.

    před 18 lety
  4. piler #4

    alebo:

    spravit input, ktory sa nesmie vyplnit, cize do neho nesmie byt nic napisane. aby to uzivatela neotravovalo, tak sa to schova stylmi. Neviem presne na kolko % to bude funkcne, ale mam pocit, ze roboty sa snazia vypnit kazde policko.

    před 18 lety | reagoval [28] numero
  5. llook #5

    avatar

    Dokud se komentářový spam bude omezovat na SEO spam, tak je to super. Počkejte ale, až nám přes komentáře začnou radit nákupy akcií:

    . _____ _____  _____ _____
    .|  __ \  _  ||  _  |  __ \
    .| |  \/ | | || | | | |  \/
    .| | __| | | || | | | | __
    .| |_\ \ \_/ /\ \_/ / |_\ \
    . \____/\___/  \___/ \____/
    před 18 lety
  6. Bednee #6

    Ja mam filtrovani spamu podle slov (z urcitych duvodu nemuzu pouzit JS a podobne veci). Jako jedno ze slov mam „http“. Takze jakykoli prispevek s URL je zamitnut. Pro lidi mam napsane pod formularem, ze linky maji vkladat bez http. Stejne se mi cca. 3× do tydne stane, ze prijde spam, ktery v sobe nema jediny link. Co to ma potom kurna za vyznam? Fakt uz ty spammery nechapu.

    před 18 lety | reagoval [9] Martiner
  7. Vesta #7

    Používám u svých projektů ochranu pomocí javascriptu a nebo pomocí skrytého pole email které nesmí být vyplněno (kontrola pomocí PHP na straně serveru). Pro tuto chvíli jsem omezil 99% spamu. Až budou roboti „chytřejší“, tak budu muset vymyslet něco nového 😉

    před 18 lety
  8. juneau #8

    avatar

    Omezení počtu odkazů v komentáři používám, jenže problém nastane u jakési té syntaxe [url=http://i.love.spam]buy cialis atd[/url] * 20 … odkazy se nepřevedou a texy je pak na ně krátké, takže je omezení počtu linků neúčinné. Díky tomu to s tvým článkem moc nesouvisí, ale vzpomněl jsem si na to.

    před 18 lety | reagoval [13] David Grudl
  9. Martiner #9

    #6 Bednee, Proč spam bez linku? To se nejspíš pak jedná o brand building :)

    před 18 lety
  10. Milan Kryl #10

    avatar

    Jo náhled bude jako druhý krok, který udělám při boji proti komentářovému spamu. Zatím mě postující roboti donutili k javascriptovému řešení automaticky vyplňovaného a skrývaného formuláře. To na chvilku bude stačit.

    Ve spolupráci s filtrem na závadná klíčová slova mi sice díky cialis neprojde komentář obsahující socialismus, ale to David rychle vyřešil
    https://kryl.info/…setrme-casem
    🙂

    před 18 lety
  11. Pavel Richter #11

    Já používám systém dvou submitů, první pro spamroboty a druhý pro lidi, samozřejmě submit pro spamroboty je csskem skrytý, vesele odešlou svůj obsahově nabitý komentář, ale dostanou se na stránku, která nic neuloží a usoudí, že moje stránky nefungujou :) zatím to drží výborně…

    před 18 lety | reagoval [13] David Grudl [24] Radek Tůma
  12. Arthur Dent #12

    Na nejmenovaném systému jsem použil kombinaci několika metod. Z těch, co tu padají, je spousta nepoužitelných ve chvíli, kdy potřebujete nasadit řešení najednou pro 8000 blogů, které mají formuláře na 150.000 stránek, staticky vygenerovaných, v několika jazycích… To pak jsou všechny chytrákoviny s javascriptem a otázkami „Zvíře na 3 písmena co štěká“ nanic… Ale protože jsem hodný admin a rád se o své jistě zbytečné nápady podělím se vševědnými kritiky, kteří znají líp než já mou situaci, tak – tu máte:

    1. U odeslaného komentáře spočítám odkazy s HTTP, odkazy s „www.“ a odkazy ve formátu „xxxxx tečka YY“ nebo „YYY“
    2. Pokud je počet odkazů větší než 1, tak počítám poměr počtu odkazů k počtu slov. Pokud je jeden odkaz na méně než 5 slov, tak jde o spam a zvyšuji ohodnocení podezřelosti. Práh klesá s počtem odkazů
    3. Mám slovník slov podezřelých, závadných a zakázaných a ohodnocuju. Slovo podezřelé je třeba „buy“, závadné jsou názvy léků, zakázané jsou konkrétní domény, např. jistá CK z Brna.
    4. Před ohodnocením nahrazuju známé skupiny znaků, např. nulu nahrazuji písmenem „o“, jedničku písmenem „i“, znaky „//“ písmenem „w“, zahazuji veškerou interpunkci…
    5. Kontroluju nesmyslné shluky znaků v URL či v textu – opravdu jste už viděli doménu „aF5gzXB4.net“? (Kontrola na poměr velká/malá písmena).

    No a nakonec mi vypadnou tři kategorie komentářů: 1. Bez podezření, 2. Podezřelé, 3. Zakázané. Ty z první kategorie procházejí přes tlačítko „Potvrdit“ (totéž jako náhled zde), ty z druhé ještě dostanou k opsání CAPTCHA. Třetí kategorie jde do /dev/null, zaznamenávám si IP a po dvou pokusech během hodiny je IP zablokována.

    A předejdu některým tazatelům: Ne, nešlo by dát jen potvrzovací tlačítko. Je mi jedno že VY nevíte proč bych to nemohl udělat. Tohle je pouze pár tipů pro lidi, co jsou v podobné situaci.

    před 18 lety | reagoval [13] David Grudl
  13. David Grudl #13

    avatar

    Ochrana proti spamu bude nejúčinnější, pokud bude kombinovaná. Metoda vyplnění políčka javascriptem v této době vychytá obrovské množství komentářů. Je-li kombinovaná s kontrolou na počet odkazů, dají se vychytat i ručeně vkládané komentáře. Prostě přibližujeme se limitně účinnost 100 %.

    #8 juneau, velmi správná a věcná připomínka

    #11 Pavle Richtere, na to bacha, selže to při odesílání formuláře klávesnicí (např. Enterem).

    #12 Arthure Dente, jo tak proto občas vyplňuju Captcha a jindy ne

  14. Arthur Dent #14

    #13 Davide Grudle, Jo, přesně proto. Mohu říct, že bylo zoufalé období, kdy spamování dosahovalo téměř parametrů DDoS, rekord byl sedm stovek spamkomentů za minutu po dobu deseti minut z padesáti různých IP a komentáře byly v tomhle stylu:

    Jméno: gvH5Pn5BaY1
    URL: gvH5Pn5BaY1.org
    mail: 8wmnD3YH8uO@gvH5Pn5BaY1.org
    text: gvH5Pn5BaY1.org

    Dodneška nechápu k čemu to bylo. Díky hodnocení projdou dneska dva kontrolou a pak už je skript zahazuje hned na začátku při kontrole IP…

    před 18 lety | reagoval [15] Arthur Dent [16] David Grudl
  15. Arthur Dent #15

    #13 Davide Grudle, PS k #14 Arthur Dent: A nejlepší byl mail od jednoho nespokojeného uživatele: „Já žádné potvrzovací tlačítko nechci! Píšete, že je to kvůli komentářovému spamu, ale já žádný spam v komentářích nikdy neměl a proto ŽÁDÁM odstranění tohoto tlačítka!“ :)

    před 18 lety
  16. David Grudl #16

    avatar

    #14 Arthure Dente, to je kód chemické struktury tajné vakcíny proti AIDS. Ta byla vyvinuta v roce 1990 v Port Down, ale americká vláda její existenci utajila, protože USA vyvinuly AIDS jako biologickou zbraň a úmyslně s ní nakazily světovou populaci a to ještě není nic proti látkám přidávaným do očkování proti chřipce, která ovlivňují myšlení… uááá… pomoc!

    před 18 lety | reagoval [17] Arthur Dent [18] llook
  17. Arthur Dent #17

    #16 Davide Grudle, A kdyby jen to! Navíc tím pravidelně práškují lidi z letadel – bližší info na osud cé zet, heslo „chemtrails“. A ta zpráva je pravdivá, protože jsem modrooký a mám už týden rýmu v levé nosní dírce!

    před 18 lety
  18. llook #18

    avatar

    #16 Davide Grudle, Ned Flanders: „Kluci, to jsme rádi, že na očkování nevěříme, co?“

    před 18 lety
  19. Radek Tůma #19

    Na některých stránkách se chrání tím, že před vložením příspěvku je nutno do speciálního pole ručně vyplnit nějaký text/kód. Je to spolehlivé?

    před 18 lety | reagoval [20] Arthur Dent
  20. Arthur Dent #20

    #19 Radku Tůmo, Víceméně. Hovoří se o tom, že na jednodušší obrázky už fungují nějaké OCR skripty. Složitější prý spammeři řeší tak, že si je nechávají přečíst „ručně“, od reálných lidí, např. na pornostránkách za přístup k obrázkům… Podstrčí pornochtivému obrázek z „cílové“ stránky, nechají jej opsat text a pak to použijou na původní stránce. :)

    před 18 lety
  21. Radek Tůma #21

    A když je to (kdesi jsem to viděl) např. otázka „Kolik prstů má člověk na ruce?“, čili k odeslání příspěvku je nutno zadat 5, to už robot neprolomí?

    před 18 lety | reagoval [22] David Grudl [23] Arthur Dent
  22. David Grudl #22

    avatar

    #21 Radku Tůmo, tohle právě už prolomí. Cca o 73 % účinnější je ptát se na počet prstů na noze.

    před 18 lety
  23. Arthur Dent #23

    #21 Radku Tůmo, To je „minimal IQ check“ a je to zakázáno Mezinárodní Komisí Pro Lidská Práva, protože to diskriminuje blbce, a jak známo, i blbec má mít právo přidat komentář :)

    Ale vážně: Ne, na to robot nepřijde. Ovšem pokud spammer opravdu chce, tak si nejprve jednou vyplní komentář ručně a pak to vloží jako „mustr“ do robota. Tím padají všechny ochrany typu „Toto políčko nevyplňovat“ nebo „sem napište 21“. Naštěstí pro nás spammeři česky většinou neumí… :)

    před 18 lety | reagoval [26] piler
  24. Radek Tůma #24

    #11 Pavle Richtere, Můžete to prosím více rozebrat? Submit pro lidi ten spamový robot vidí také, jak zařídíte, že použije ten skrytý pomocí CSS? To, že je třeba v textu umístěn dříve než druhý submit, určitě nepomůže.

    před 18 lety | reagoval [25] Arthur Dent
  25. Arthur Dent #25

    #24 Radku Tůmo, Protože robot poctivě odesílá všechna políčka, tak odešle jak submit name="robot", tak submit name="clovek" Bohužel to není stoprocentní ochrana, viz např. #13 David Grudl

    před 18 lety | reagoval [27] Pavel Richter
  26. piler #26

    #23 Arthure Dente, reakcia na sem nevyplnovat: aby si mohol vyplnit mustr do robota potrebuje vediet nazov inputu, ktory sa nema vyplnat, takze by sa tento nazov mohol dynamicky menit a hashovat, cize by sa zabranilo tejto finte, alebo sa mylim

    před 18 lety | reagoval [29] Arthur Dent
  27. Pavel Richter #27

    #13 Davide Grudle, dxg, díky za upozornění.
    Leda když je text komentáře až na posledním místě vyplňování, tak je jasný, že enter vytvoří jenom další řádek v textarea, takže uživatel už pak na to tlačítko klikne.

    #25 Arthure Dente, měl sem za to, že to robot odešle prvním co najde…
    divné je, že mi teď na fotoblog nepřibyl ani jeden spam za cca 2měsíce, což ale může znamena jenom štěstí 😁

    před 18 lety | reagoval [29] Arthur Dent
  28. numero #28

    avatar

    #4 pilere, Ha, to jsem použil a na malé, skoro neodkazované stránce naší třídy naskákalo asi 300 spam postu v návštěvní knize za poslední měsíc. = bez účinku.

    před 18 lety
  29. Arthur Dent #29

    #27 Pavle Richtere, Nenene, robot většinou velmi důsledně vyplní a odešle všechna políčka. #26 piler Ale informace o tom, jak se to políčko ZROVNA TEĎ jmenuje, by měla být nějak předána, buď v cookies nebo v hidden poli, popř. by měla být uložena v session na serveru, což s sebou nese několik problémů: 1. nutnost mít povolené cookies (a poslouchat stížnosti „Nemohu přidat komentář, opravte si to“), navíc pro robota není až takový problém předávat stále stejnou cookie (totéž v případě hidden pole). Hlídat to pak nějakými „tickety“ je řešení přinejmenším sporné – na jednom blogu možná, ale na velkém systému? 2. Session je zbytečná zátěž pro server – musela by být vytvořena každému kdo si otevře libovolnou stránku, platí pro ni totéž co pro cookies a leckdy vyprší dřív než člověk komentář dopíše („Psal jsem komentář půl hodiny a pak mi ho systém zahodil jako spam, ten váš systém je *****!“)

    před 18 lety | reagoval [30] Roman
  30. Roman #30

    avatar

    Co sa tyka tych nezmyselnych textov. Ono je to testovacia faza. Samotne realne spamy zacnu chodit az vtedy ked si spamovaci system overi ze spamy sa nemazu. Vacsinou sa spamy pridavaju do starsich clankov a clovek o tom dlho ani nemusi vediet. Takze kazdemu co tvrdi ze nedostava spam by som odporucal si poriadne prezriet databazu komentarov k clankom 😉 A hladat slova ako „nice“ „site“, „buy“ [url= a podobne 😉 Naviac neda sa spolahnut ani na kompletnu vyplnenost na jednom webe mi spambot stale dokola pisal nazvy americkych statov a vyplnal iba policko so spravou 😉. Dalsia vec je, ze spambot sa dokaze zavesit (ak ma moznost) aj na samotne odosielanie „post“ (alebo get) a vobec „fyzicky“ nevyplna formular. Totiz.. kontrolovat refferera je ponekud nestastne riesenie pri blokovani spamov, pretoze mnohi ludia maju firewally ci browsery, ktore kvoli bezpepecnosti refferera ani neposielaju.

    #29 Arthure Dente, Mne sa osvedcila ta session (kde si ulozim cas zaciatku pisania komentara) pretoze sa praveze neuklada nic na strane uzivatela a teda system spambot nevie aku ochranu vlastne pouzivam. Po odoslani komentara skontrolujem rozdiel casu medzi zaciatkom pisania a koncom pisania a ak je mensi ako by realny clovek dokazal piat (napr mensi ako 5 sec) tak komentar neprejde. Tiez to kombinujem s kontrolami na slova, ale take sofistikovane metody ako pouzivas zatial nemam. Dik za napady.

    před 18 lety | reagoval [32] Arthur Dent
  31. Majkls #31

    Tak jo Davide. Poprvé jsi mi dokázal, že je OOP skutečně k něčemu dobrý. Jinak dobrá práce 😉. Se spamem mám taky problémy. V případě zájmu můžu poskytnout nastřádaný blacklist IP adres. Už jich pár je.

    před 18 lety
  32. Arthur Dent #32

    #30 Romane, 1. Testování vypadá jinak, tohle byla masivní akce. Tipuju to spíš na snahu stránky „oživit“, aby Google zjistil změnu a považoval je za aktualizované. 2. Session samosebou musí „něco“ uživateli poslat, a to konkrétně session ID. Posílá se buď jako cookie nebo jako součást URL, tak jako tak ji dostane útočník. 3. Napsat komentář „Hehe! :)“ a odeslat stihnu i za tři sekundy :)

    Zásadní problém boje proti komentspamu i do budoucna je následující: Na světě jsou statisíce, možná miliony lidí, co jsou ochotni vzít „drobnou práci z domova, PC a připojení na internet nutné“ a co budou podobné spamkomentáře posílat ručně. Jeden cent za deset komentářů, za tisíc spammer zaplatí dolar (jestli vůbec zaplatí)… A kde jsou všechny CAPTCHA, kde jsou všechny multisubmity a k čemu jsou skrytá pole, když spamuje reálný člověk? První pokusy už pozoruju…

    před 18 lety | reagoval [33] Roman
  33. Roman #33

    avatar

    #32 Arthure Dente, Komentar „hehe“ ma pre mna asi taku istu hodnotu ako spam 😉. Aj ked je od takej osonosti akou si ty 😉. Ale vazne, co sa tyka odstavca cislo 2. Pokial urcis urcite realne limity v akych funguju ludske ruky a zmysly, tak odhadom trva minimalne 3 sekundy (v idealnom pripade ze existuje este testovacia faza pred odoslanim a mui prist k odoslaniu tak este viac) kym clovek vymysli napise a odosle zmysluplny komentar dlhsi ako 1 vetu. To odpoveda aj na tvoju uvahu v druhom odstavci. Realny sposob ako bojovat proti spamu (okrem jeho rucnej kontroly a mazania) je znizit frekvenciu akou mozu spamy pribudat. Je to samozrejme lahko naburatelne ale v spojeni s ostatnymi serepetickami (napriklad ja interval zvysujem ak bol prvy pokus neuspesny) je to jeden zo sposobov ako sa spamu vyhnut.

    Co sa tyka toho testovania. Pokial mi vyvracias moju domnienku domnienkou, zatial nemozem suhlasit. Podla mna je to testovanie. Funguje takto. Ulozim spam(y). Po urcitom case otestujem ci tam ostal(i). Proces funguje dovtedy pokial nie je istota, ze spamy nie su mazane, ked su pustim spambota naplno a uz sa tym nezaoberam. Preto mi trebars „chodia“ spamy nadalej na jednej zo stranok kde som si to neskoro vsimol. Oni sa sice na stranke nezobrazia, ale botovi je to uz jedno. Pokial vsak spamy systematicky mazes, spamy ustanu a k pokusom o spam pride zasa o nejaky cas neskor.

    před 18 lety | reagoval [34] Arthur Dent
  34. Arthur Dent #34

    #33 Romane, Mám zjištěno, že spamy z náhodných znaků chodily z IP adres, ze kterých dřív přicházely „reálné“ spamy. Proč by robot, který dřív přidával spamy, měl teď potřebu testovat jestli to jde? Pokud z jedné IP adresy přijde několik set spamů, pak je dva měsíce klid a pak z té samé adresy přijde několik set náhodných, je opravdu pravděpodobnější, že se jedná spíš o „okopávání záhonku a zalévání sazeniček“ než o test.

    A k tomu limitu: Samosebou, i ten jsem zkoušel. Empiricky jsem odhadl, že je „mentálně“ nemožné poslat tři smysluplné komentáře do minuty. Bohužel, realita mne přesvědčila o opaku. Nezapomeň na rozdílnou situaci: Ty hovoříš o metodě, co si Pepa Blogger může nasadit na svůj blog o internetu s pěti sty návštěvníky denně. Já hovořím o metodách, které jsou použitelné na veřejném systému, kde je těch návštěv řádově víc a kde musí být takový způsob, který bude vyhovovat jak Pepovi Blogegrovi, tak Lojzovi Linuxákovi, Mařeně Básnivce, Standovi Pařičovi, Vendelínu Programátorovi, Vendulce Lidumilce i Iljovi Provokatérovi. Musím počítat s tím, že se objeví např. blog nějaké třídy a o hodinách informatiky na ten blog přijde sto komentářů – všechny z jedné IP, všechny „legální“ a polovina z nich bude „Super!!!!!“, „cool“ a „LOL!“ (příklad ze života).

    před 18 lety | reagoval [35] Roman
  35. Roman #35

    avatar

    #34 Arthure Dente, Ja mam skusenosti ze proces je opacny. Najprv chodia nahodne znaky pripadne spamy v style „mas super sajtu, keep up the good work“. a az potom realne spamy. Preto tvrdim ze je to testovanie. Samozrejme ze ak je proadie opacne tak sa da usudzovat ze ide o „zalievanie kvetin“. Dalej je mozne ze sa nejedna o toho isteho spammera (resp. ide o iny server) takze to kludne moze ist zasa o testovaciu fazu.

    " Já hovořím o metodách, které jsou použitelné na veřejném systému, kde je těch návštěv řádově víc a…"

    Jasne, suhlasim. Napriek tomu je tato metoda (aj ked by islo iba o sekundy) v kombinacii s ostatnymi metodami ktore si spominal ucinnejsia, ako keby neexistovala, pretoze pokial to nechas navolno tak ti spammer moze vykonat za minutu kludne aj 60 pokusov (zo 60 roznych IP.. ved tych anonymous proxy serverov su tisicky) a nakoniec hrubou silou nejakym sposobom ochranu prerazit. Kdezto ak das limit bar len 3 sekundy tak je to 30% menej. Duplom ak sa limit po kazdom zlom pokuse na tej istej session zdvojnasobuje. Samozrejme v pripade ze druha strana nema cookies, pripadne dokonca obchadza session ktora si prenasa SESSID v url a ide napriamo na „POST“ tak jej neprejde nic. Hlavne mi timto systemom ktory som pridal dodatocne islo ot to, aby sa navonok pre spammera nic nezmenilo. Vsetko sa to deje na strane servera a do formularu nepribudli ziadne zmeny. Uznavam ale, ze v pripade ze komentar bol pisany dlhsie ako trvanie session, tak sa odoslanie vyhodnoti ako spam, to by sa ale dalo riesit sposobom nad ktorym sa zamyslam v dalsom odstavci.

    Po tom ako som zistil, ze sa spam script po case uz bez kontroly pridava do nemoty kazdy den zo 30 komentarov k tomu istemu clanku (ktore ale vdaka ochrane neprejdu), jedine co mozem spravit je premenovat skript co posiela komentare, coz ma privadza na myslienku ze by sa „nestalost“ adresy komentaroveho skriptu mohla stat sucastou ochrany. Jednoducho pri zobrazeni stranky s formularom by sa vygeneroval „ticket“ (jeho TICKET ID by sa nachadzalo ako hidden policko vo formulari) a po odoslani by sa pouzity ticket vymazal (a prip. by sa TICKET ID vlozilo ako identifikator ku komentaru). Ak by neexistoval zodpovedajuci nepouzity „ticket“ tak by sa formular nemohol odoslat. Ak by islo o rovnaky TICKET ID (ktory sa uz niekde v kopmentaroch nachadza), tak by sa jednalo o spam, alebo opakovany re-post ktory vznikol omylom. Keby sa naviac do zaznamu ticketu ukladal aj cas zalozenia a porovnaval sa cas odoslania, tak by bol problem s expirujucou session vyrieseny. Nepouzite tickety starsie ako par hodin by uz mohol cistit nejaky script pustajuci sa v pravidelnych intervaloch. Jedinecnost ticketu by zabezpecila kombinacia casu plus nahodny retazec znakov a cisel, take nieco by sa predpokladam nemalo opakovat a tym padom by nemalo prist ani k pomyleniu-si zaznamov.

    před 18 lety | reagoval [37] Arthur Dent
  36. Roman #36

    avatar

    Jaj.. ta.. nestalost adresy.. to som nevysvetlil. To by bolo realizovatelne nejak tak, ze do form action="" by si vcygeneroval action=„post/93284932qwjklej13jkl2jkl3j.html“ a v pripade ze by sa pouzival mod rewrite na „pekne url“ by si to uz server nejak „roztriedil“ do premennych. Ale kludne by to mohlo byt aj to „hidden“ policko.

    před 18 lety
  37. Arthur Dent #37

    #35 Romane, Hezké, hezké, ale třeba na nejmenovaném serveru těžko proveditelné. Při tom počtu požadavků které tam jsou je to už docela významná zátěž.

    Ale jinak nápady to jsou dobré, taky jsem je zvažoval (včetně tiketů a změn jména skriptu) a nakonec zavrhnul jako nevhodné či neúčinné. Já samosebou vím, že naprostá většina zde diskutujících nikdy nezažije stav, že jde večer spát a ráno má na serveru deset tisíc různých spamkomentů od deseti různých „rodin“ robotů, tak to prosím berte jako zajímavost a jako postřehy z „poněkud jiné dimenze“…

    PS: Samosebou – až spammeři implementují do robota protihmaty na tyhle fígle (a že jsou, co třeba projet seznam adres GETem, vycucnout údaje a po deseti vteřinách POSTnout komentář, přebrat výsledek a rePOSTnout případný nový FORM…?), tak budeme zase tam kde jsme byli a budou následovat věci jako je třeba povinná registrace komentujících… Schválně, kdo na to doplatí? Spammeři, admini nebo uživatelé? :)

    před 18 lety | reagoval [38] Roman
  38. Roman #38

    avatar

    #37 Arthure Dente, Tvoje úvahy sú správne. Zaoberal som sa nimi tiež, ale na vybral som sa touto cestou s tým, že pokiaľ príde k zhoršeniu situácie pribudnú postupne ďaľšie triky (ktoré si už napr. spomínal). Budem to robiť ako čiernu skrinku dovtedy pokým ma neprinútia začať otvorený boj. A to hlavne z toho dôvodu čo spomínaš na konci. Jednoducho sa mi všetky tie „captcha“ a „pseudo IQ testy“ nepáčili, pretože obmedzovali užívateľov. Svojím spôsobom ti závidím, máš možnosť tento problém riešiť na tak rozsiahlom počte útokov v rámci jedného webového servera.

    Čo sa týka tvojho nápadu.. ano je to samozrejme možné (a veľmi pravdepodobné, že už to niektoré spam servery robia), ale efektivita takého spamovacieho systému sa výrazne zníži. Sekundy su v behu programu dlhá doba.. naviac, ako som už povedal, oni nevidia do tej tvojej čiernej skrinky a nemôžu vedieť čo ďaľšie sa na hodnotení zúčastňuje. Trebárs práve situácia kedy by si niekto vycucol naraz čo ja viem 1000 stránok by sa v databázovej tabuľke zaznamenaných tiketov prejavila tak, že by tam v krátkom čase pribudlo veľké množstvo tiketov, v ďaľšom čase boli prvýkrát použíté (interval spustenia kontroly by sme si tiež zanamenavali) a zároveň v inom čase vznikla veľká požiadavka na použitie týchto tiketov a tým pádom uloženie komentára. Preprogramovali by sme čiernu skrinku tak, aby si všímala nezvyčajne veľkého počtu rovnako vyzerajúcich požiadaviek.. ..

    … ale ty môžeš protiargumentovať, že to spammer môže spraviť celé tak, aby sa to správalo náhodne. Áno môže, ale ja mám výhodu tej mojej čiernej skrinky.. a on nevie čo tam všetko beží, môže sa len domnievať a skúšať a na základe výsledkov pokusov sa zasa len domnievať.. nikdy nevie presne čo má urobíť. Kdežto on mi st8le poskytuje obrovské množstvo materiálu na základe ktorého ho môžem efektívnejšie odstaviť. Adresy som síce nikdy nezbieral, ale keby som mal tak napádaný server ako je ten tvoj, pravdepodobne by som k takému kroku pristúpil.. musí to byť pekná zbierka, odhadujem že sú to tisícky IP adries.

    před 18 lety | reagoval [39] Arthur Dent
  39. Arthur Dent #39

    #38 Romane, Ano, je to hodně adres, ale často nepoužitelných pro ban – např. gateway velkého providera. Ale měli bychom se ve svých úvahách držet jednoduchého pravidla: Pokud jsou pravidla tak složitá, že a) měrou větší než malou omezují legální uživatele nebo b) nadmíru zatěžují server, tak jsou pro větší systém nepoužitelná.

    Příklad? Třeba požadavek vyplnění e-mailové adresy a zaslání výzvy „Kliknutím na tento odkaz potvrdíte…“ Účinnost 99.9%, ale vopruz a zatížení serveru. Všechny tikety a „dynamická řešení“ jsou zase zatěžující pro server a předpokládají, že např. uživatel má povolené cookies nebo že spamrobot nedokáže načíst aktuální podobu stránky a z ní vytvořit POST. Ve chvíli, kdy to spamrobot udělá, je třeba metodu buď rozšířit (a tak zvýšit zátěž), nebo přitvrdit (a zprudit uživatele) nebo změnit…

    To platí bezezbytku o tom co píšeš: „Preprogramovali by sme čiernu skrinku tak, aby si všímala nezvyčajne veľkého počtu rovnako vyzerajúcich požiadaviek.“ – dokážeš si představit „poměr cena-výkon“ takového řešení? Zkus si představit náročnost takového vyhodnocování „co je si podobné“ na velkém serveru, to abys měl extra železo jen na tohle. Co je ještě „podobné“? Jak moc „podobné“? :)

    Běžný robot má třeba 10.000 adres. Na jeden server jich je nasměrováno třeba 1000. Není problém požadavky rozložit tak, aby mezi získáním a odesláním bylo těch několik vteřin a přitom efektivita poklesla jen o pár procent. Navíc to budou komentáře „jen trochu či velmi málo podobné“ (polymorf)…

    A teď mě napadá ještě jeden příklad problému s tiketem: Nelze svázat tiket s IP adresou, protože např. u AOL se IP adresa s každým požadavkem může změnit.

    K té „černé skříňce“ – tu mohu dělat já, ale ti, co nasadí open-source řešení mají smůlu. Prvním masově napadeným systémem byl open-source WordPress. Tam to řešení před spammerem neskryješ. :)

    před 18 lety | reagoval [40] Roman
  40. Roman #40

    avatar

    #39 Arthure Dente, „Ale měli bychom se ve svých úvahách držet jednoduchého pravidla: Pokud jsou pravidla tak složitá, že a) měrou větší než malou omezují legální uživatele nebo b) nadmíru zatěžují server, tak jsou pro větší systém nepoužitelná. Příklad? Třeba požadavek vyplnění e-mailové adresy a zaslání výzvy „Kliknutím na tento odkaz potvrdíte…“ Účinnost 99.9%, ale vopruz a zatížení serveru.“

    V tom s tebou samozrejme súhladsím. Nie som zástancom zložitých riešení na triviálne problemy. Príklad s potvrdzovaním cez E-mail je na komentáre npepoužiteľný, ale rozhodne je dôležitý pre registráciách, alebo trebárs aj niektorých dotazníkoch a súťažiach. Teda v prípadoch, že potrebujeme nejako overiť pravosť a zabezpečiť určitú identifikáciu užívateľa.

    „Všechny tikety a „dynamická řešení“ jsou zase zatěžující pro server a předpokládají, že např. uživatel má povolené cookies nebo že spamrobot nedokáže načíst aktuální podobu stránky a z ní vytvořit POST. Ve chvíli, kdy to spamrobot udělá, je třeba metodu buď rozšířit (a tak zvýšit zátěž), nebo přitvrdit (a zprudit uživatele) nebo změnit…“

    Jasné v tvojom prípade sa môže celý obsah nakešovať a až posielanie komentáru spúšťa kontrolné mechanizmy. Lenže v takom prípade tie samotné kontrolné mechanizmy sú dynamické a ich náročnosť stúpa s ich účinnosťou. Takže v konečnom dôsledku, ak sa ti na tvojom serveri začne viac diskutovať môže ti práve tá konrola server vyťažiť viac, ako nejaké primitívne riešenie, ktoré vyrába tikety pri každom zobrazení komentárov+formulára. No vlastne.. ked už o tom hovoríme, kľudne môžeme formulár vyvolať až po kliknutí na tlačítko pridať komentár (dokonca to môže byť robené dvojakým spôsobom.. t.j v prípade že nie je JavaScript sa vyvolá „ďaľšia“ stránka kde sa už formulár nachádza, v prípade zapnutého JS sa tiket vytvorí kratučkým XMLHttprRequestom ..súhlasím, že je to obštrukcia, ale pokiaľ by som nutne potrebovaľ odhľahčiť server, tak by som to takto nejak riešil. Takto môžu články aj komentáre ostať nakešované a server je odľahčený. Ja by som nechel ist takou cestou, ze by som užávateľov akokoľvek obmedzoval, takže pokiaľ vyslovene nechceš aby boli session a cookies (a ani mod-rewrite, ktoré tiež spotrebuje nejaký čas pri spracovaní regulárnych výrazov), tak by som tiket spravil do políčka HIDDEN vo formulári a prišlo by ešte k jednému uloženiu záznamu TIKETU do databázy. Je to veľká záťaž? Možno hej. V tom prípade by som negeneroval tiket do DB, ale by som trebars kontroloval iba ten spomínaný rozdiel času.. Zobral by som cas, zakodoval obojsmernym algoritmom a ulozil do policka hidden. Potom po prijati formulara s polickom hiden by som to odkodoval a porovnal s cim potrebujem. Ale to su vsetko hypoteticke uvahy. Ak by som skutocne potreboval odlahcit masinu a pritom pouzit akurat toto riesenie (ak by som bol po testoch a skusenostiach aj nadalej presvedceny ze funguje) tak by som si spravil nejaky vlastny ukladaci priestor priamo v ramke a zataz by som „zminimalizoval na maximum“ 😉

    Zkus si představit náročnost takového vyhodnocování „co je si podobné“ na velkém serveru, to abys měl extra železo jen na tohle. Co je ještě „podobné“? Jak moc „podobné“? :)

    Chapem. A viem si predstavit vselico 😉. Lenze kedze som sa nedostal ku konkretnemu rieseniu danej situacie, nemozeme sa bavit o efektivite neexistujucej rutiny. To ako by to bolo riesene by cele vyplynulo z toho ake caste su taketo poziadavky, kolko casu zabera vyhodnotenie jedneho formulara pred jeho prijatim a ine zalezitosti. Ved aj tvoja kontrola ma nejaku narocnost. Takze aby som to nejak vtipne ukoncil. To ze mi tam davas tu dvojbodku a pravu oblu zatvorku.. za prve neviem co to znamena, a za druhe ma to uraza 😉.

    Běžný robot má třeba 10.000 adres. Na jeden server jich je nasměrováno třeba 1000. Není problém požadavky rozložit tak, aby mezi získáním a odesláním bylo těch několik vteřin a přitom efektivita poklesla jen o pár procent. Navíc to budou komentáře „jen trochu či velmi málo podobné“ (polymorf)…

    Nepochybujem o tom, ze by som dokazal pripravit taky skript ktory by podobne utoky odchytaval. Je to totiz priklad chyby v matrixe.. t.j. anomalie ktora sa da identifikovat. Skoro by som sa zlakol niecoho takeho co by sa vzdy spravalo inak. Ale ako som uz predtym spominal, na kontrolu komentarov pouzivam aj slovnik takze. Urcite by ten pokus nazbieral nejake cierne bodiky a po analyze by som sa zasa adaptoval.

    před 18 lety | reagoval [42] Arthur Dent [44] Roman
  41. Roman #41

    avatar

    A teď mě napadá ještě jeden příklad problému s tiketem: Nelze svázat tiket s IP adresou, protože např. u AOL se IP adresa s každým požadavkem může změnit.

    To by som chcel vidiet v praxi. Kazdopadne potom bude mat AOL nejaky IP range takze sa bude musiet spravit nejaka vynimka. Ale vlastne.. nikdy som netvrdil ze chcem previazat TIKET s IP adresou, tiket by bol ulozeny priamo vo formulari, alebo v URL.. bol by to identifikator zaznamu ktory by bol ulozeny na strane servera. To co by v tom zazname bolo to este neviem. Zacinal som s ty m casom.. ale viem si predstavit ze by sa tam dali dat aj ine zaujimavosti. Mimochodom… uz pri jednorazovej poziadavke vygenerovat 1000 tiketov by sa dalo spravit pocitadlo, ci tiket nema podobne identifikacne znaky ako predosly (kontrolovalo by sa trebars prehliadac, refferer a podobne) a po prekroceni povoleneho poctu by sa uz ostatne tikety prestali pridavat. Ale toto je zasa len taka hypoteticka uvaha.

    K té „černé skříňce“ – tu mohu dělat já, ale ti, co nasadí open-source řešení mají smůlu. Prvním masově napadeným systémem byl open-source WordPress. Tam to řešení před spammerem neskryješ. :)

    Asi to vyznie trochu arogante, ale na tento typ home-uzivatelov zvysoka kaslem. Nech is spammeri barsaj zozeru. Ja si vsetko programujem sam, pretoze nic nevyhovuje mojim predstavam. Obycajne ani nie preto ze by to nemalo vsetko co potrebujem, ale preto ze to ma kopec toho co nepotrebujem a pripada mi to blbe.

    před 18 lety | reagoval [42] Arthur Dent
  42. Arthur Dent #42

    #40 Romane, #41 Roman Ano, a jsme tam kde jsme byli. Ty vymýšlíš čupazupa udělanost pro malé stránky, kde máš pár požadavků za den, kde máš plnou kontrolu nad HTML kódem, kde máš všechny stránky dynamicky generované, kde tě nemusí až-tak-moc zajímat lidé bez JS, bez cookies, s obskurními prohlížeči… Já si nic z toho dovolit nemohu, tak hledám „minimal obtrusive“ řešení :)

    Ad podobnost požadavků na ticket: 1. Spambot dynamicky mění proxy, ID prohlížeče a referer.
    2. Spambotů je spousta v nejrůznějších zombie počítačích po celém světě. Nemusí jeden poslat tisíc požadavků najednou, stačí když jich tisíc pošle po jednom :)

    S tím AOL to je prosté – měl jsem totiž na Neškodném přesně takovou kontrolu. V HIDDEN byl MD5 hash IP adresy a v přidávacím skriptu jsem kontroloval, že komentář přišel opravdu z té adresy, pro níž byl vytvořen formulář. Vše fungovalo až do doby, než přišel Point z USA přes AOL a moc se divil, že mu systém tvrdí, že je spammer. A nakonec jsme přišli na to, že se mu IP neustále mění, po minutě měl jinou, leckdy se mu změnila mezi požadavkem na HTML stránku a požadavkem na obrázky…

    před 18 lety
  43. pixy #43

    Podle mě jedinou funkční ochranou před spamboty je co nejrychlejší, co nejméně obtěžující a co nejúčinnější Turingův test ;-D

    před 18 lety | reagoval [49] Roman
  44. Roman #44

    avatar

    #40 Romane, Najnavstevovanejsi web co robim ma 6–7 tisic unikov denne. Je to na Slovensko malo? Do prvej 50tky sa asi zmestim 😉 Jasne nemenovany projekt bude podstatne vytazenejsi, ale hadam si nemeriame velkosti nasich prirodzni, ci ano? Ale vazne. Ja robim presne to iste. Robim „minimal obtrusive riesenia“. To znazi ze to bezi aj bez JS, ak treba, bez cookies a na obskurnych prehliadacoch. Nikdy som nemal rad super-duper riesenia, vzdy som chcel aby to chodilo.

    Podobnost pozadavku na ticket. Nemam logy takychto veci, ale rad by som videl ukazku potvrdzujucu tvrdenie 1. bolo by to poucne, nemusel by som sa tym dalej zaoberat. Co sa tyka bodu 2. presne to je ten problem ktoreho sa asi najviac treba obavat, ze spamovaine je rozlozene v dlhsom casovom slede. Ze pouziva pauzy. Je proste „ludske“. Tak ci onak stale su tu tie slovniky.. a dalsie serepeticky ktore doplnia celkovy obraz antispamoveho riesenia.

    Ten AOL je zaujimavy pripad. Ale ako hovorim, na ipecku sa to az tak nespolieha. Hlavna myslienka je v rozdiele casov. Aj ked uznavam, ze ju pomerne uspesne spochybnujes.

    před 18 lety | reagoval [45] Arthur Dent
  45. Arthur Dent #45

    #44 Romane, Nejde až tak o počet návštěvníků, toho jsem dalek. Jde o to, že nemohu říct „Tak, milí jůzři, teď si všichni vložte do šablony JavaScript tenaten, jinak vám nepudou komentáře“ a nemohu jim ho ani vložit sám (předgenerované HTML). TO je ten hlavní problém „univerzálního“ (ve smyslu svobody při návrhu HTML šablony) systému s mnoha uživateli (=bloggery, nikoli čtenáři).

    Za formulaci ad 1 se omlouvám, mělo znít „Stačí, aby spambot dynamicky měnil…“, během přeformulovávání komentáře to vypadlo. Nejde tedy o tvrzení, omlouvám se, mělo jít o návrh „protihmatu“, který by tvé řešení zpochybnil.

    K tiketům jen tolik: Zkusil jsem je, neosvědčily se. Jednak znatelně vzrostla zátěž systému, druhak jsem dostal stížnosti, že „nelze přidat komentář“. Totéž s časovou kontrolou – pár zaměstnanců (tři nebo čtyři, už nevím) jedné firmy z Brna se na blogu jednoho z nich domlouvali kam půjdou na oběd a kde zapaří (zaměstnavatel zakázal IM) – a „časová“ kontrola jim za chvíli zařízla celou gateway. Historka je z roku 2004, už tehdy jsem musel řešit komentářové roboty a řešil jsem je -časovou kontrolou… :)

    před 18 lety | reagoval [49] Roman
  46. David Grudl #46

    avatar

    Jen pár poznámek:

    • IP adresa – na tu se nedá spoléhat. Změní se při znovupřipojení na dial-upu, mění ji mezi požadavky různé akcelerátory, jako například Google Web Accelerator
    • referrer – ten mohou zahodit nebo pozměnit proxy, v Opeře jde zcela vypnout, existují pluginy, které jej pozmění nebo zahodí
    • hlavičky – za relativně „spolehlivé“ hlavičky, které se nezmění mezi requesty, se dá považovat a User-agent a různé Accept-* (charset, language, encoding).
    • čas – s nástupem brouzdání v tabech není nic neobvyklého, že si v pátek ráno otevřu stránku, vrátím se k ní až v neděli večer a napíšu komentář. Jsem-li toho po sobotě schopen ;)

    2 Roman: asi chápu, proč ti systém La Trine občas zahodí komentář kvůli délce 🙂 Poprosím tě o větší stručnost. Vyjádřit tutéž myšlenku méně slovy je sice těžší, ale všichni čtenáři to ocení.

    před 18 lety | reagoval [47] Arthur Dent [58] Majkls
  47. Arthur Dent #47

    #46 Davide Grudle, ad „čas“ – tak takhle vznikají ty komentáře, kde mi někdo v neděli vyčte věci, které poslouchám už od pátku! :)

    před 18 lety
  48. Roman #48

    avatar

    Dgx, obycajne sa rozkecam o veciach ktore ma neskutocne bavia. Keby si zacal s jazykovymi hrackami, alebo trebars commdore 64 scenou.. alebo sociologiou a manipulaciou davmi, alebo.. snip snip snip

    před 18 lety
  49. Roman #49

    avatar

    #45 Arthure Dente, Reagujem na prvý odstavec. S týmto spôsobom práce sa plne stotžňujem. Preto ma zaujal tvoj bodovací systém ktorý si spomínal. Zdá sa mi veľmi praktický.

    #43 pixy, Aj samotna captcha je turingov stroj. A dokonca aj rozdiel medzi vyvolanim formulara, kontrolou a napisanim prispevku je urcitym sposobom odpovedou na otazku: „si stroj ci nie si?“ 😉 (…Já vím Arthure, jsem tvrdá palice 😉

    před 18 lety | reagoval [50] Arthur Dent
  50. Arthur Dent #50

    #49 Romane, Navrhuju následující doplňkový Turingův test, který zcela spolehlivě zjistí, že komentář nepsala inteligentní bytost:

    1. Je v komentáři jen odkaz? Zahodit, to píšou opice za půl centu kus.
    2. Je v komentáři pouze některá z vazeb „souhlasím s“, „jsi idiot“, „to bych mohl podepsat“ nebo „autor by měl“…? Zahodit, to nejspíš okolo inteligence ani neprošlo.
    3. Je v komentáři něco jako „nepochopil jsem o čem píšeš, ale“? Zahodit, v takovém případě inteligentní tvor nekomentuje.
    4. Je v komentáři slovo „rulezzz“, „widle“, „sux“ nebo „tux“? Zahodit, psal to robot z Komentářové Služby – Prudibot PhanaticFlame nebo šestnáctiletý haxx0r, v obou případech lze podezření na inteligenci spolehlivě vyvrátit.
    5. Je v komentáři slovo „Casino“? Zahodit, to píšou Casinoboti do diskuse k čemukoli. Je v komentáři slovo „Hulán“? Zahodit, to píšou Hulánoboti do diskuse k čemukoli.
    6. Je v komentáři vyšší počet vulgarit než podstatných jmen? Zahodit, to psal robot, idiot, volič levice, student MUNI, zastydlý hiphoper, fanynka TokioHotel nebo něco podobného, v žádném případě inteligentní tvor.

    Pokud komentář tímto testem neprojde, je jisté, že jej nepsala inteligentní bytost, tedy např. člověk, delfín, gorila nebo úředník.

    před 18 lety | reagoval [51] David Grudl [53] zirafka
  51. David Grudl #51

    avatar

    #50 Arthure Dente, ještě bych filtroval: „mno“ a „volič ODS“, případně „typický volič ODS“

    před 18 lety
  52. Roman #52

    avatar

    Najrozumnejšie by asi bolo založiť komentárovú pračku.. komwash.com , a prepierať v nej všetky komentáre. Myslím že by dokázala dokonca preprať texty tak aby sa zmestili aj pod barbarsky krátky a skoro až hriešne nemorálny limit 5000 znakov. 😉

    před 18 lety
  53. zirafka #53

    avatar

    Uloha pro chytre hlavicky: Bude tento komentar #50 Arthur Dent podle pravidel v nem popsanych zobrazen? Rekurze je svina.

    před 18 lety | reagoval [57] Arthur Dent
  54. xert #54

    Nechápu co řešíte. Na blogu nepoužívám žádnou ochranu a ještě mi žádný komentář nepřišel.

    před 18 lety | reagoval [55] Arthur Dent [56] zirafka
  55. Arthur Dent #55

    #54 xerte, Od doby co jsem zakázal komentáře mi taky nepřišel ani jeden.

    před 18 lety
  56. zirafka #56

    avatar

    navrhuju komentar #54 xert na nominaci v souteze o komentar roku!

    před 18 lety
  57. Arthur Dent #57

    #53 zirafko, Koukal jsem se na to slovo do slovníku, ale tam je jen „Rekurze: viz rekurze“ ;) Jinak samosebou že můj komentář projde, protože používá uvozovky okolo inkriminovaných slov. :)

    před 18 lety
  58. Majkls #58

    #46 Davide Grudle, z mých zkušeností bych tak řekl, že ma sajtě mám asi 1200–1500 pokusů o spam, přičemž pouze 700 se dá považovat za náhodné IP. Jedna IP adresa dokoce disponuje číslem 324 – tolikrát se snažila spamovat. Dialup je už dnes offtopic. A pokud nepomůže IP, pomůže bloknout celej rozsah. Stejně píšu jen česky, takže mi Taliáni budou těžko rozumnět.

    před 18 lety

Tento článek byl uzavřen. Už není možné k němu přidávat komentáře.


phpFashion © 2004, 2024 David Grudl | o blogu

Ukázky zdrojových kódů smíte používat s uvedením autora a URL tohoto webu bez dalších omezení.