Antispam: zmírnění ochranných kouzel

Sun, 25 Jun 2023 19:04:46 +1100

Pustil jsem se do revize svého antispam modulu pro komentáře a koukám, že já se s tím tehdy fakt nepáral. Většinu kontrol jsem zachoval, ale například ty prohozené názvy polí mě fakt vytáčely... Bylo potřeba trochu ubrat. Pár tipů, jak hlídat spam ve vlastních formulářích si můžete přečíst v nejnovějším článku.

Kontrolní otázka

Jako třeba "Napište, kolik je jedna plus jedna" je sice stará, ale stále efektivní metoda. Ona čeština je mnohdy nejúčinnější antispam. Já kontrolní otázku používám stále, ovšem už delší dobu ji za vás vyplní JavaScript. Robot ale JavaScript neumí (tedy stále v to pevně doufám), takže by se dál neměl dostat. A kdyby náhodou, je tu ještě spousta dalších kontrol.

Povinně prázdné pole

Zatím jsme stále u robotů. Kdyby náhodou první kontrola selhala, je tu ještě skryté pole (stylama v externím souboru, nikoli jako hidden input), které musí zůstat prázdné, jinak se formulář neodešle. Spamboti zpravidla vyplňují vše, co ve formu naleznou. Alespoň dřív tomu tak bylo. A když pole pojmenujeme nějak výstižně, například "skype" nebo "company", robot se na něj chytí. Tato pole jsem měl dvě, ale jedno musí stačit, a tak šlo druhé pryč.

Prohozené názvy polí

Email a web měly prohozený name, a tak když někdo zadal zavináč do pole e-mail (podle labelu určeného pro webovou adresu), formulář se neodeslal. Funkcionalita chytrá, ovšem působí takové zmatky v procesingu, že od ní budu všechny zrazovat.

Test HTTP_REFERERa

Většina spambotů je chytrá a odesílá stejného referera jako stránky, kam se snaží poslat komentář. Pokud na to autor spambota zapomněl, budu ve výhodě. Užitkem si nejsem příliš jistý, takže vypínám.

Kontrola odeslaných dat

Roboty bychom měli vyřešené, takže teď ještě živé spammery. A protože kontrolní otázka je pro pohodlí těch slušných komentujících skrytá, musím nasadit další úroveň kontrol pro živé lidi, co jedou copy+paste+enter na každém webformu, který najdou.

Spamwords

Dříve to byla viagra, nyní spammeři nabízejí půjčky. Mám uložený seznam slov, která se nesmí v komentáři objevit. Tohle zpravidla odradí cizokrajné spammery, proti tuzemským to moc efektivní není: proto tu mám co pár týdnů jeden až dva spamy. Což není zlé.

Počet odkazů v těle zprávy

Další způsob, jak odradit cizokrajné spammery, je spočítat hypertextové odkazy v těle zprávy. Spamy totiž často obsahují jen kýbl odkazů, a právě proti nim jsem takto chráněný. Spolu s testováním BB kódu v rámci předchozího bodu odchytím velkou část nevyžádaných zpráv. (BB kód nepoužívám, a proto, když se ho někdo snaží odeslat, napíšu mu zprávu, ať to nedělá.) Tady jsem provedl jenom aktualizaci, protože knihovnu jsem psal už hodně dávno, a nepočítala s https variantou odkazů.

Jak vidíte, žádná otravná captcha není potřeba. Těch kontrol je sice požehnaně, ale pohodlí uživatele je na prvním místě.