Antispam u komentářů - bude fungovat?

01.6.2008(12:00) | Napsal: matej21 | Kategorie: Blog | Přečteno: 4707x

Aneb dokáže PHP script správně rozeznat člověka od bota?


Měl jsem v plánu nechat standartní antispamovou ochranu, kterou používám na CompiNeXu. Tedy pokud máte zapnutý JavaScript, nemusíte se o nic starat. Když ne, napíšete náhodně vygenerovanou číslici od nuly do devítky.Po nějaké době jsem zjistil, že na CompiNeX RSS roboti přispívají. Po tomto útoku jsem se rozhodl, že zkusím napsat jednoduchý antispamový filtr v PHP

Jak funguje

Při generování stránky se do session vloží náhodné číslo od jedničky do desítky. JavaScript potom zapíše do pole v HTML stejné číslo. (proč přeškrtnuté je níže :)) Po odeslání se kontroluje, zda se IP nenachází na mém soukromém black/whitelistu. Pokud ne, probíhá ověřování, které je rozděleno do ctyř hlavních kroků. Kontrola IP, kontrola zakázaných slov, kontrola odkazů a konečné sčítání bodů. V první, nejdůležitější, části využívám databázi i api od MaxMind. Antispam zjistí, z jaké země IP pochází a podle toho ji oboduje od jedničky do pětky (jako ve škole :)). V dalším kroku se kontroluje obsah příspěvku. Respektive slova, která jsou zakázaná. Ve třetím a kroku se spočítají linky, zjistí se, zda některé linky nejsou zdvojené, zkontroluje je s blacklistem domén a oboduje TLD. Nakonec se všechny body podle různých vzorců sečtou a přidají se body, pokud se neshoduje session s poslaným antispam polem.

Nefunguje to, tak jak chci

Teď se dostáváme k vysvětlení přešktrtnuté věty. Až při psaní tohoto článku jsem si uvědomil, že všechny stránky od včerejšího dne kešuju a ke generování náhodných čísel tedy nedochází. Musim to ještě poopravit.

Přibudou další formy kontroly

Pokud i přes tento způsob ochrany spamboti proklouznou, budou následovat další ověření. Jednoduché ale účinné je vytvořit fake html pole např. s názvem "www" a většina botů ho vyplní :). Jako další krok mě napadá kontrolovat jak dlouho člověk/robot psal komentář s ohledem na délku. Potom například zjišťovat poměr textu a odkazů, nebo zda se nepokoušel vytvořit link například pomocí tagu "a" nebo pomocí nějakého bb kódu.


Komentáře k článku

#1Subber Web
02.10.2008(19:48)
ja sem se na filtrovani prispevku vys_al a obcas promazavam prispevky nabizejici gold wow :Dreagovat
#2matej21 |Mail Web
03.10.2008(12:45)
reakce na Subber (1): no ja sem na to taky nejdriv sral ale na compinexu se mi zacaly mnozit spamy.. boti rozlouskli JS ochranu.. tak sem to zkombinoval jeste s timhle a spamy sem zredukoval asi o 90%reagovat
#3matej21 |Mail
20.3.2009(9:56)
#4Hrdlodus |Mail
23.4.2010(0:29)
"Jako další krok mě napadá kontrolovat jak dlouho člověk/robot psal komentář s ohledem na délku."

Uživatel může svůj text vložit ctrl+v a odeslat.

"Potom například zjišťovat poměr textu a odkazů..."

Někdy uživatel může vložit víc odkazů než robot.reagovat
#5Hrdlodus |Mail
23.4.2010(0:30)
PS
Warning: Cannot modify header information - headers already sent by (output started at /www/matej21.cz/www/include/config.php:17) in /www/matej21.cz/www/class.komentare.php on line 105

Warning: Cannot modify header information - headers already sent by (output started at /www/matej21.cz/www/include/config.php:17) in /www/matej21.cz/www/class.komentare.php on line 107reagovat
Jméno:
Heslo:
Mail:
Web:
Vzkaz:
Spam kontrola:
napište číslo devět
Smajlíci:
  Help
RSS tohoto článku: rss