Antyspam

W dzisiejszych czasach każda strona pozwalająca wysyłać komentarze musi liczyć się z atakiem spambotów i jakoś się przed nimi zabezpieczyć. Spam na WWW ma inne cele i ograniczenia niż spam rozsyłany przez e-mail i póki co istnieją proste i skuteczne sposoby do walki z nim.

Pomysły podane w tym artykule wcieliłem w życie, dodałem kilka bardziej zaawansowanych technik i wszystko to udostępniłem jako darmowy filtr antyspamowy.

Dlaczego nie CAPTCHA?

Bo koszt spamu ponosi niewinny użytkownik.

  • Przeklepywanie liter jest drażniące i uciążliwe.
  • Większość domorosłych autorów nie ma pojęcia o technikach OCR i robi obrazki nieczytele dla ludzi, a nie botów (np. niski kontrast, pstrokate kolory i rozstrzelone litery wcale botom nie przeszkadzają).
  • Są barierą dla osób niewidomych, słabo widzących, a czasem nawet daltonistów.
  • CAPTCHA jest niezbędna jako zabezpieczenie przed profesjonalnymi spamerami, którzy mogą zainwestować grube pieniądze w zaspamowanie specyficznego serwisu (typu Google, Hotmail). Jeśli na zaspamowaniu twojej strony nie da się grubo zarobić, to masz luxus zabezpieczania się przed ogólnymi (głupimi, tanimi :) botami.

Dlaczego nie rejestracja?

Znów — fatyga dla użytkownika, a są boty, które potrafią automatycznie rejestrować się na forach, co wcale nie dziwi, bo wypełnienie formularza i otworzenie linku z e-mail to coś, co można zrobić nawet prostym skryptem PHP (rozszerzenie imap + curl).

Nie ma nad czym płakać, bo dzięki serwisom takim jak BugMeNot i Mailinator weryfikacja przez e-mail i tak zdewaluowała się.

To co zatem?

Są dwa popularne typy spambotów — spamujące linkami w celu podwyższenia PageRank oraz boty wykorzystujące lukę w komendzie mail() PHP. Zamiast robić różne voodoo wystarczy przyblokować dokładnie to, co jest niezbędne dla spamerów.

Linki

Wszystkie spamowe posty mają jedną fundamentalną wspólną cechę — linki do innych stron.

Rzadko kiedy ktoś w komentarzach podrzuca więcej, niż jeden-dwa linki, więc pierwszą obroną jest odrzucanie postów z dużą ilością linków. Wykrycie linków jest banalnie proste: wystarczy zliczyć ilość wystąpień http:// i https://.

Posty, które zawierają dopuszczalną ilość linków (1-2?) można kolejkować do moderacji, sprawdzić jeszcze innymi metodami albo po prostu przepuszczać (póki spamerzy nie nauczą się wysyłać spamowych postów z małą ilością linków).
Posty bez linków nie są w ogóle interesujące dla tego typu spamerów.

(na stronach, gdzie dodałem takie banalne zabezpieczenie ilość spamowych postów spadła z ok. 40 dziennie do 2-3.)

Słowa kluczowe

Spamowanie linkami działa najlepiej, gdy post jest pełen słów kluczowych związanych z tematem spamu. Na szczęście te słowa kluczowe są przeznaczone dla bota Google, więc nie mogą być w żaden sposób ukrywane, bo by ich bot nie znalazł.
Wystarczy zebrać pare postów, żeby zorientować się jakie tabletki, dewiacje, gry hazardowe i oferty kredytowe są na topie. Rozpoznanie tych specyficznych słów pomaga zdecydować które posty z linkami są spamem (samo blokowanie słów to przesada, bo przecież ktoś mógłby się chwalić co wyprawiał po wygranej w kasynie ;)

Dziurawy mail()

Komenda mail() w PHP ma idiotycznie zaprojektowane dodawanie własnych nagłówków, które umożliwia rozsyłanie spamu z naiwnie napisanych formularzy kontaktowych.

Boty nie wiedzą, który formularz później używa mail(), więc ślą exploit gdzie popadnie. Odrzucaj posty pasujące do wyrażen regularnych /Content-Type\s*:/i lub /Content-Transfer-Encoding\s*:/i (BTW: w PHP zapomnij o ereg, używaj preg).
Odrzucaj też posty zawierające \r\n w imieniu osoby wysyłającej (nie da się tych znaków wstawić przez <input type=text>, więc można spokojnie założyć, że to bot).

Oczywiście jeśli używasz mail(), to filtruj dane od użytkownika — wycinaj znaki nowej linii (zarówno \r jak i \n) ze wszystkiego, co wrzucasz do nagłówków. W przeciwnym wypadku jeśli masz w kodzie coś podobnego:

$naglowki = "Reply-To: $imie <$email>";

to twój formularz może być wykorzystany do rozsyłania spamu — bot zamiast imienia albo e-mail dorzuci pare linijek nagłówków MIME, które wyślą kopię tego e-maila do innych osób, a nawet pozwolą dodać załączniki w HTML.

Inne pomysły

Jest ich wiele — polecam podsumowanie technik filtru Sblam!.

Uwagi

Gdy blokujesz posty — pisz dlaczego i nie banuj od razu. Opis przyczyny blokowania na nic nie zda się botom, ale gdyby post człowieka przypadkiem wpadł w filtr, to dasz możliwość ominięcia pomyłki filtru.

Co nie działa?

Skuteczność <a rel=nofollow> jest znikoma. Tracą na tym autorzy stron, do których użytkownicy naprawdę linkują, a takie oznaczenie linków i tak nie odstrasza spambotów — botom nie opłaca się sprawdzać, czy strona tak oznacza linki, bo to zajmuje tyle samo czasu, co po prostu wysłanie spamu.

Sprawdzanie HTTP_REFERER jest kompletnie, ale to absolutnie totalnie bez sensu. Botowi banalnie prosto jest spreparować ten nagłówek, a z drugiej strony jest on kłopotliwy dla prawdziwych użytkowników, którzy mogą mieć go wycinanego lub modyfikowanego przez przeglądarkę, firewall albo proxy. Podobnie z Cookies, User-Agent i innymi danymi z HTTP.

Ograniczanie ilości postów z danego IP. Spam może być słany z rozproszonego botnetu, może być słany w większych odstępach czasu przez całe dni i noce, a z drugiej strony możesz mieć grupy odwiedzających z jednego Proxy providera/sieci osiedlowej wieszających wszystkich na jednym IP.

Co zawsze działa?

Moderacja. Nie musi być uciążliwa — filtrami możesz sobie zminimalizować ilość rzeczy do moderowania i np. udostępnić sobie posty jako RSS/Atom, żeby tylko rzucać okiem, czy nie przedostały się jakieś spamy.

Licencja: copyleft 

 

Źródło: porneL