www.SAMURAJ-cz.com 

19.04.2024 Rostislav Translate to English by Google     VÍTEJTE V MÉM SVĚTĚ

Články

Ochrana proti SPAMu v komentářích

Úterý, 15.08.2006 18:26 | Samuraj - Petr Bouška |
Nepříjemný fenomén dnešní doby je SPAM. A nejde jen o SPAM, který všichni známe ze své pošty, ale v poslední době je populární i zaplácávání diskuzí a jiných webů, kde se dá vkládat text, který se zobrazuje, SPAMem pomocí různých robotů. Toto již potkalo i můj web a za poslední dva týdny se denně objeví několik SPAMových příspěvků. Proto jsem se rozhodl provést jednoduché a běžné opatření. Uvidíme, nakolik bude úspěšné.

Nyní je tedy, při každém vložení komentáře, třeba ještě vložit čtyři kontrolní znaky, které jsou zobrazeny pomocí obrázku. Obrázek je zatím jednoduchý, neboť si nemyslím, že by někdo používal "text recognition" algoritmus, ale uvidíme. Celé jsem to provedl velmi jednoduše a postup popisují následující kroky:

  1. vygeneruji náhodný alfanumerický řetězec, to je klíč
  2. z tohoto klíče odvodím explicitním algoritmem čtyřznakový kód
  3. do formuláře vložím skryté pole s hodnotou klíče pro kontrolu při vkládání (šlo by to předávat pomocí SESSION proměnné, aby se útočník vůbec nedostal ke klíči, ale myslím, že je dost těžké z klíče odvodit kód)
  4. kód zobrazím jako obrázek (návod najdete v PHP manuálu u popisu imagecreate), pomocí parametru GET mu předám klíč
  5. při vkládání kontroluji, jestli kód (vytvořený z klíče) je stejný jako zadaný řetězec

Nakolik je moje jednoduché řešení účinné se dozvím časem. Pokud bude třeba, napadá mne několik vylepšení, ale toto řešení mne stálo asi 40 minut času.

zobrazeno: 6532krát | Komentáře [7]

Autor:

Pokud se chcete vyjádřit k tomuto článku, využijte komentáře níže.

Komentáře

  1. [1] piler

    Servus,

    no zda sa mi to komplikovane :). Ja som rozlyslal nad niecim takym:

    - spamrobot nidky nevie, ktore polozky maju byt vyplene, tak vyplni vsetky. Takze co to spravit tak, ze jedno policko (input) nesmie byt vyplene a aby to uzivatela nemylilo, tak ho pomocou css schovat. Co ty na to?

    Skusil som to vziat z druheho konca...:)

    Čtvrtek, 24.08.2006 23:51 | odpovědět
  2. [2] Samuraj

    odpověď na [1]piler: Podobná myšlenka mne také napdla, ale netuším jak tito roboti pracují. Jestli prostě vezmou stránku a najdou všechnu formulářové prvky, které vyplní. Nebo jestli to někdo poprvé vyplní ručně a pak to nechá dělat robota.

    Každopádně je to zajímavé řešení, které by neotravovalo uživatele.

    Pátek, 25.08.2006 15:52 | odpovědět
  3. [3] piler

    odpověď na [2]Samuraj: no robot musi vediet aky ma byt nazov formularoveho prvku, ktory nema menit a ten by sa mohol menit...hash: den + retazec...takze keby si ho naucil, ze nevyplnaj asdk3a23 tak na dalsi den, aleho hodinu by ten nazov bol iny...

    popripade hashovatat aj ostatne prvky...

    Pátek, 25.08.2006 16:58 | odpovědět
  4. [4] Samuraj

    odpověď na [1]piler: Tak jsem zkusil tuhle metodu se skrytým inputem, který se nesmí vyplnit. Přišel mě tak jeden SPAM týdně, což není moc, ale pořád to není ideální.

    Pak jsem zkusil udělat checkbox, který je zatržený a uživatel ho musí odškrtnout, to mě přišlo hned spousta SPAMu.

    Takže jsem se zase vrátil k zadávání kódu. To mě zatím nepřišel žádný SPAM.

    Neděle, 10.02.2008 18:09 | odpovědět
  5. [5] Smíťa

    Zrovna jsem se komentářovým spamem opět zabýval a raděj než obrázek používám početní příklad + několik dalších triků, včetně nastrčeného inputu a zatím učinek velmi dobrý.

    (viz. http://smitka.org/blog/komentarovy-spam)

    Boji zdar :-)

    Pátek, 17.10.2008 13:55 | odpovědět
  6. [6] gay

    Super článek!

    Pátek, 22.07.2011 19:50 | odpovědět
  7. [7] Michal

    odpověď na [1]piler: Jo, dělám to podobně. Mám na to několik metod. Vytvořím políčko NICK o velikosti 1x1 bod, robot do něj bezpečně vloží nějaké jméno, ale já testuju, zda je prázdné. Pokud předávám povinný e-mail, políčko pojmenuju třeba PLECHOVKA, takže mi tam robot nikdy email nevloží. Ale já testuju, zda je tam alespoň zavináč. Do dalšího políčka (pojmenovaného opět nějak netradičně) vkládám lehce zašifrovaný čas ve vteřinách a při zpracování testuju, zda čas není větší, než půlhodina (tím zároveň nastavuji platnost formuláře). Podobných metod mám víc a v kombinaci všech jsem robotické zprávy odfiltroval

    Pátek, 18.07.2014 14:56 | odpovědět
Přidat komentář

Vložit tag: strong em link

Vložit smajlík: :-) ;-) :-( :-O

Nápověda:
  • maximální délka komentáře je 2000 znaků
  • HTML tagy nejsou povoleny (budou odstraněny), použít se mohou pouze speciální tagy (jsou uvedeny nad vstupním polem)
  • nový řádek (ENTER) ukončí odstavec a začne nový
  • pokud odpovídáte na jiný komentář, vložte na začátek odstavce (řádku) číslo komentáře v hranatých závorkách