Už i k tomuto webu si našly cestičku spam-roboti. Jestli se vám stalo to samé, zde je řešení.

Předmluva

Nejedná se o nic převratného a nepřekonatelného, ale jako ochrana proti běžným robotům stačí. Jistě, na internetu je spoustu návodů na to, jak udělat nějakou ochranu prostřednictvím kontrolního obrázku, ale proč se namáhat. Takový robot stejně jen hledá formulář a když nějaký nalezne, odešle nějakou špínu jako je např. hromada odkazů. Pokud mu v cestě stojí jakkoliv jednoduchá překážka, zprávu se mu nepodaří odeslat, protože to by vyžadovalo napsání individuálního spam-skriptu pro každou ochranu. Z tohoto pohledu je vlastně i tato ochrana zbytečně složitá, protože by myslím bohatě stačilo dát před odeslání zatrhávací políčko, které by musel uživatel zatrhnout (i když možná že robůtci se snaží zaškrtnou všechno co jde, takže to není jisté).

Pokud někomu opravdu záleží na obejití nějaké kontroly, tak se mu to stejně podaří a to i u obrázků. Kdo zná filehosting rapidshare.de, tak ví že např. program USdownloader uměl (nebo ještě umí) automaticky rozpoznávat kód v kontrolním obrázku, nebylo to sice na 100% ale dost se tomu blížil, řekl bych tak 90%.

Tato ochrana spočívá ve vygenerování barvy, kterou musí uživatel díky svému zraku určit x-) a vybrat ji v seznamu.

*Zdrojové kódy byly odstraněny, pokud máte o tento anti-spam zájem, zmiňte se v komentářích a já je poskytnu.

Do odesílacího formuláře přidáme skryté políčko s identifikátorem barva, které bude nabývat hodnoty zamíchaného pole barvy, vždy použije první hodnotu pole, ale ta bude díky shuffle různá.

Pozn. Tuto proměnou pak budeme porovnávat s barvou jakou zadal uživatel. Kdybychom porovnávali odeslanou barvu přímo s proměnnou $barvy5b05d, porovnávali by jsme jednu hodnotu odeslanou uživatelem (který zadal barvu podle hodnoty $barvy5b05d) s hodnotou nově vygenerované barvy $barvy5b05d, tzn. že musíme obě položky (vzor i kontrolu) odesílat z původní stránky.

*Zdrojové kódy byly odstraněny, pokud máte o tento anti-spam zájem, zmiňte se v komentářích a já je poskytnu.

Zde se dostáváme k viditelné části věci, můžete upravit podle sebe. Já jsem vše dal do pěkného rámečku pomocí fieldset a použil jsem popisku legend. Vygenerovanou barvu jsem zobrazil jako pozadí čtverečku v tabulce, o tom jaká barva zde bude rozhodují jednoduché podmínky if, každý chápe že x-). Uživatel pak barvu zadá prostřednictvím formulářového prvku select, můžete si sem dát klidně obyčejné textové pole.

Ještě chci podotknout, že hodnotu barvy jsem nezadával v anglickém tvaru, ale v #RGB a navíc ne úplně přesně (trošku jiný odstín). To pro případ že by si přecejen chtěl někdo napsat speciální spam kontrolu obcházející skript (trošku jsem to tím stížil).

*Zdrojové kódy byly odstraněny, pokud máte o tento anti-spam zájem, zmiňte se v komentářích a já je poskytnu.

A tady mámě (trošku delší :-D ) finální podmínku, která naprosto triviálním způsobem otestuje, zda uživatel zvolil správnou barvu. Pokud je podmínka splněna, tzn. uživatel zadal správnou barvu, bude definována proměnná $neni_to_spam s hodnotou pravda, tento výstup už snadno zakomponujete do své kontroly před odesláním nějakého příspěvku, článku nebo čehokoliv jiného.

9 komentářů

Neváhejte napsat k článku komentář

Nevyplňujte:

  1. 1
    skilla

    to abych se pokusil napsat nejakyho adaptibilniho bota, kterej se dokaze ucit =)

  2. 2
    Cartman

    Jo, taky jsem přemejšlel že bych si napasl nějakýho jednoduchýho spammera a provizorne ho nechal nekde na freehostingu spamovat :)) ale k tomu by bylo asi potreba automaticky spousteni skryptu a to na feecku nemaj.

  3. 3
    mikke

    Barvoslepej je nahranej...

  4. 4
    Antonín Daněk

    Jo, to jsem do toho článku původně taky napsal, že to je taky jako anti-barvoslepec, ale pak jsem si řekl že nebudu odrazovat:-D, tak zvolí hold jednu barvu a bude dávat tak dlouho odeslat dokud se nevygeneruje ta správná barva no ... tolik jich tam neni.

  5. 5
    LesTR

    Zdravím,
    mám několik poznámek.
    1)
    >... program USdownloader uměl (n ...
    To je sice pravda, ale platí to je u defaultních písmen. Pokud člověk použije nějaký alternativní font(případně vytvoří vlastní), přídá písmenům rozdílná pozadí, nemá vůbec žádnou šanci : )

    2)Ve zdrojovym kódu je přímo text barvy v hidden elementu :) Opravdu neni nic jednoduššiho, než si to pole přečíst. IMHO tak 60% botů, kterým se někdo trochu věnoval, tímto krásně proleze. Více bezpečnější mi přijde vkládat celý formulář pomocí js bez jakéhokoliv ošetření.

    3) fci shuffle() bych nahradil fci random() na index pole ve výpisu hodnoty, není třeba pracovat s celým polem, bude to o řád rychlejší (což ale asi není rozhodující)

    4)Ježiš co je to za konstrukci u toho ověřovacího if? x-(
    Neni lepší, přehlednější a rychlejší porovnat je mezi sebou and fce in_array()?

    Myšleno takto:

    $_POST['barva'] == $_POST['spam'] and in_array{$_POST['barva'],$barva)

    ;o) :-D

    Abych jen nekritizoval, tak musím říct, že nápad je to dobrý a v několika případech bude krásně fungovat.

    Jen malé doporučení:
    Je dobré zvyknout si na error_reporting(E_ALL), např. $_POST[spam] je proti doporučení php, správně je $_POST['spam']. Notice dokažou hodně ulehčit práci : ) Věřte mi, vím o čem mluvím ...

    Snad jsem nebyl moc kritický, neberte to osobně, nápad je to dobrý, jen jsem chtěl poukázat na drobné chybky.

    Jen tak dál!

    LesTR
    P.S. Někdo by si měl zkusit napsat příspěvek pod Firefoxem : ) Je to fakt peklo ...

  6. 6
    Antonín Daněk

    1)Mno, co se týče toho US, používal jsem ho asi před rokem ale co si vzpomínám tak to nebyl úplně obyč vygenerovanej text, ale že tam ty znaky byly různě nakloněný a na pozadí bylo taky cosi. Na druhou stranu já osobně si nedovedu představit jak bych z toho ty ,,zdeformovaný" písmena přečetl takže to tak možná nebylo.
    2)S tím já právě nesouhlasim, řekl bych že s takovým lama anti-spamen nidko nepočítá :-D, prostě si myslim že takovýchhle jednoduchých antispamů se dá udělat spousty a nevim jestli ti co dělaji roboty je naučí všechny obcházet. Je ale fakt, že kdyby se tenhle anti-spam začal používat na víc serverech a stálo by za to ho obcházet tak by to byla nejspíš otázka pěti minut. js je pro mě zatim tabu :-D
    3)No v tomhle případě je to pole dost mini, ale je fakt,že random je profesionálnější no. (v případě tohodle blogu rád uberu ICcku trošku výkonu CPU, za ty výpadky si to zaslouží x-) )
    4) No to určitě je :-), je fakt že jsem tu fci už jednou někde používal, ale vůbec mě to nenapadlo, jsem hold PHP samouk a zásoba fcí. který si pamatuju je mizerná.

    Kritika mi nevadí, naopak jsem rád a taky jsem si vědom že nejspíš PHP píšu dost bordelácky :-/. Vadí mi akorád kritiky typu Nech toho a běž orat pole., ale na tom mě spíš hlodá to, že má vůbec někdo takový názory.

  7. 7
    LesTR

    add1)Nevim presne jak to delal US, ale vetsinou to funguje na principu analyzy postupu pixelu na obrazku a jeho porovnavani se vzorem. Tedy hodne narocny algoritmus.
    add2)To je prave velky omyl, kazdy poradny bot si projede ve formulari veskera hidden pole a s temi nejak zachazi. Pro zvyseni bespecnosti by rozhodne stacilo ulozit danou hodnotu napr. do SESSION ;-)
    add3)A cim asi ty vypadky jsou zpusobeny?Nedokazu si predstavit stroje, kde na kazdem bezi x stovek takovychto situ. To musi byt sakra vykon ...[noflame]
    add4)Ja taky neznam vsechny fce, od toho je tady manual : )

    Jinak kritiky tipu nech toho a bez orat pole se ode me nedockate : )) Kdyz uz kritika, tak podlozena!
    Jinak si zkuste dat do nejakych konfiguraku ten error_reporting(), jiste se pobavite. Osobne kdyz sem to tenkrat nastavil poprve, tak sem se za bricho popadal :-)

    Jinak ten js hraje na to, ze je to client skripting, ktery se vetsine botum ani nezobrazi ;o)
    hehe, uz se naucil psat ty smajliky. Js je fajn, jen by mel jeste vratit pozici kurzoru na puvodni ;o) takhle je fakt nepouzitelnej, jen k nasrani.

    Mno nic, gl

  8. 8
    Antonín Daněk

    - Když de někdo do freehostingu tak s shitama snad musí počítat a myslim že jen z ty reklamy maj peněz dost, navic ty vypadky byly az donedavna prijatelny, musí hold s rozvojem posilovat kucí no, koupili novy domeny ale servery asi ne.
    -Použiju poupravenou větu, myslim že z jedný reklamy. Je to shit, ale můj :-D .
    - error_reporting() zkusim.
    - O js uvažuju, uvidíme co čas přinese :-), jo tenhle na kládání těch smajlů je trošku depresivní.x-)

  9. 9
    Antonín Daněk

    danek<zavináč>antonindanektečkacz

    Tak bohužel, už jsem narazil na chybu. Občas nějaký ten spam pronikne. Je to sice jen metodou pokus-omyl, takže toho není moc, ale stejně.