Antispam u komentářů - bude fungovat?
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
| 02.10.2008(19:48)
|
|
ja sem se na filtrovani prispevku vys_al a obcas promazavam prispevky nabizejici gold wow :Dreagovat
| |
#2matej21
|
| 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
|
| 20.3.2009(9:56)
|
|
testreagovat
| |
#4Hrdlodus
|
| 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
|
| 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 | |

