Rozwój internetu nieustannie zmierza w stronę większego nacisku na treści tworzone przez samych użytkowników. Udostępnianie co jakiś czas nowszych narzędzi odwiedzającym witryny, umożliwiających im współudział w zawartości serwisu, niesie jednak ze sobą poważne zagrożenie: spam. Jak się przed nim skutecznie bronić?
Na szczęście istnieją rozwiązania, które pozwolą nam w pełni zautomatyzować tę czynność, oferując przy tym szereg innych usług dodanych. Na uwagę zasługują zwłaszcza dwa: Akismet oraz Sblam.
Zasada działania w obu przypadkach jest bardzo podobna: właściciel witryny umieszcza na stronie kilka linii kodu, które powodują przekazanie danych wysłanych przez formularz do centralnego serwera, udostępnianego przez twórców aplikacji. Przeprowadzana jest tutaj dokładna analiza treści w oparciu o liczne testy, po czym do witryny zwracany jest wynik określający, czy wiadomość jest spamem, czy nie.
Zalet takiego rozwiązania jest przynajmniej kilka – najważniejsze z nich to z pewnością łatwość instalacji i fakt, że właściciel strony nie musi się martwić o aktualizacje filtrów i wymyślanie
coraz to nowszych zabezpieczeń – wystarczy raz zainstalować system i można spać spokojnie. Dodatkowym atutem jest fakt, iż dokładne zasady działania stosowanych filtrów antyspamowych nie są dostępne publicznie – dzięki czemu spamerom ciężej jest je obejść.
Zarówno Akismet, jak i Sblam wykonują szereg testów, wśród których jednym ze skuteczniejszych
jest zliczanie liczby linków, istniejących w przesłanej treści. Stosowane są również czarne listy spamerów, a do jednej z najciekawszych funkcjonalności należy sprawdzanie pochodzenia (na podstawie adresu IP) autora wpisu – sytuacja, w której na polskiej stronie dodawanych jest mnóstwo komentarzy np. z Chin, jest bowiem bardzo podejrzana.
Ciekawych wniosków może dostarczyć również analiza godziny, w której komentarz czy post został napisany. Jak widać, zakres przeprowadzanych testów jest bardzo szeroki, co gwarantuje wysoką skuteczność działania. Fakt przetwarzania danych na zewnętrznym serwerze ma jednak i wady: wydłuża czas analizy, która – wg autora Sblam – trwa średnio około 2 sekund oraz jest nieskuteczna w momencie awarii centralnego serwera.
Udowodnij, że nie jesteś botem
Trzecia grupa mechanizmów antyspamowych przerzuca dużą część działania na użytkownika, który zobligowany jest do udowodnienia, że jest człowiekiem, a nie bezmyślnym robotem. Najpowszechniej stosowanym rozwiązaniem jest CAPTCHA (Completely Automated Public Turing Test to Tell Computers and Humans Apart), które jest formą zautomatyzowanego testu Turinga, pozwalającego określić zdolność maszyny do myślenia w sposób podobny do ludzkiego.
W przypadku witryn WWW do odfiltrowania botów stosuje się kilka losowych znaków, umieszczonych w postaci graficznej,często na specjalnie do tego celu przystosowanym tle, które ma utrudniać odczytanie liter. Zadaniem użytkownika jest przepisanie wyświetlanych znaków w dodatkowe pole formularza – jeśli nie zrobi tego prawidłowo, traktowany jest jako bot, co skutkuje niemożnością rejestracji czy dodania postu/komentarza.
Popularność CAPTCHA nie jest do końca zrozumiała, gdyż tak naprawdę jest to jedno z najgorszych rozwiązań – jest uciążliwe dla użytkowników, którzy sami mają często trudności z odczytaniem tekstu, zwłaszcza dla osób niewidomych i niedowidzących. Dodatkowym czynnikiem, przemawiającym za niestosowaniem tego typu mechanizmów, jest fakt, że zostały już wielokrotnie złamane dzięki zastosowaniu oprogramowania OCR (Optical Character Recognition).
Dobrym przykładem jest zabezpieczenie stosowane przez skrypt forum phpBB, które nie sprawia botom spamerskim praktycznie żadnego problemu. Innym problemem jest niemożność użycia tego zabezpieczenia przy przesyłaniu track- i pingbacków, które w technologii
blogowej są często stosowane.
Zważywszy na powyższe wady rozwiązania CAPTCHA, od pewnego czasu popularność zdobywają
nieco ich zmodyfikowane wersje. Na uwagę zasługują takie skrypty jak \”Did You Pass Math?\” czy \”Math Comment Spam Protection\”. W formularzu dodaje się jedno pole tekstowe, w które użytkownik musi wpisać wynik prostego działania matematycznego, przykładowo \”2+7\”. Nie wydaje się jednak, aby to rozwiązanie pozostało skuteczne na dłużej, ponieważ wprowadzenie go do popularnej aplikacji z pewnością nie przyniosłoby oczekiwanych efektów.
Czy tę walkę można wygrać?
Mimo że metody działania spamerów są coraz bardziej wyrafinowane, właściciele witryn
nie stoją na straconej pozycji w walce z wszędobylskim spamem. Spamerzy najczęściej wykorzystują naiwność i nieświadomość webmasterów, którzy rzadko kiedy decydują się na jakiekolwiek zabezpieczenia. Oczywiście istnieją skuteczne metody obrony, jednak ich popularność jest zadziwiająco niska. Przyczyn należy szukać także w dostępnej literaturze
informatycznej, która – niestety – bardzo rzadko podejmuje ten temat.
Jakie zabezpieczenia antyspamowe wybrać? Najlepszym rozwiązaniem będzie wybór oraz integracja dwóch aplikacji: zastosowanie połączenia Bad Behavior i Sblam powinno zablokować ~99% spamu, a to wszystko przy bardzo niskim nakładzie pracy, polegającej jedynie na dodaniu kilku linii kodu. Warto przy tym pamiętać o poprawnym użyciu funkcji {stala}mail(){/stala} i dbaniu o bieżące aktualizacje popularnego oprogramowania, takiego jak systemy CMS czy fora dyskusyjne.
Z problemem spamowania – poprzez wypełnianie
wszelkiego rodzaju formularzy internetowych
– webmasterzy mają do czynienia od stosunkowo niedługiego okresu czasu. Wszystko rozpoczęło się kilka lat temu od prymitywnych form spamu, polegających najczęściej na zasypywaniu ksiąg gości wpisami reklamowymi, niemającymi nic wspólnego z odwiedzaną stroną. Właściciele witryn,
chcąc zwiększyć ich popularność oraz tzw. link popularity (wskaźnik ważny dla wyszukiwarek), często osobiście odwiedzali tego rodzaju strony, na których zostawiali swoje wpisy.
Skuteczność takich rozwiązań skłoniła spamerów
do stałego rozwoju stosowanych technik. Dzisiejsze ataki są o wiele bardziej zaawansowane,
wykonywane przez specjalnie do tego celu napisane oprogramowanie. Profesjonalnie przygotowane roboty internetowe automatycznie odwiedzają i bombardują wpisami już nie tylko księgi gości, ale także blogi, fora dyskusyjne, formularze kontaktowe, systemy wiki czy całe aplikacje CMS (ang. Content Management System).
Z problemem tym spotkał się zapewne nie tylko każdy webmaster i administrator serwera, ale także wielu zwykłych internautów, dla których niektóre komentarze czy posty na forach mogły wydawać się niezrozumiałe.
Rodzaje ataków
Ataki botów spamerskich, w zależności od celu, jaki chce osiągnąć agresor, możemy podzielić na dwie podstawowe grupy: podwyższające wskaźnik link popularity witryny bądź wysyłające tradycyjny spam pocztowy, poprzez luki w oprogramowaniu.
Groźny jest zwłaszcza ten drugi typ, kiedy to nasze konto służy spamerom np. do wysłania kilkudziesięciu tysięcy niechcianych wiadomości – może to spowodować wpisanie adresu IP serwera na tzw. czarne listy (Realtime Block List, RBL) i w konsekwencji – paraliż poczty wychodzącej.
Każda forma spamu niesie za sobą także inne problemy, pośród których wyróżnić możemy znaczne
zwiększenie zużycia transferu (boty pobierające wszelkie pliki z naszej witryny mogą spowodować przekroczenie limitu transferu i tym samym zablokowanie
konta), a także stratę czasu na moderację i usuwanie niechcianych komentarzy oraz obecność dziwnych treści, które dla nieświadomych użytkowników
mogą okazać się problematyczne (również poprzez np. linki do zawirusowanych plików).
W walce ze spamerami webmasterzy nie są na szczęście bezbronni. Istnieje wiele metod, które pozwalają ograniczyć ilość spamu na stronie.
Podstawowe rozwiązania
Najłatwiejszym do wprowadzenia – ale z pewnością nie najlepszym – sposobem walki ze spambotami jest wyłączenie bądź ograniczenie funkcjonalności, powodującej problem. Można tego dokonać np. poprzez zablokowanie możliwości komentowania wpisów czy wymuszenie konieczności rejestracji użytkownika, zanim ten będzie mógł pisać na forum. Lecz są to jedynie półśrodki do osiągnięcia celu, zwłaszcza że roboty spamerskie są już tak wyrafinowane,żepotrafiązałożyć konto na forum, potwierdzić rejestrację poprzez kliknięcie w link z wiadomości e-mail, a następnie zalogować się i dodawać nowe posty. Oczywiste z kolei jest, iż wyłączenie możliwości pisania na forum dla wszystkich użytkowników jest zupełnie pozbawione sensu, stąd też konieczność stosowania innych rozwiązań.
Jednym z podstawowych sposobów walki ze spamem w komentarzach czy wszelkiego rodzaju treściach dodawanych przez użytkowników jest moderacja. Może ona przybierać różne formy – moderowane mogą być poszczególne wpisy, konta użytkowników (aktywowane przez administratorów po stwierdzeniu poprawności danych), czy też stosowane rozwiązania pośrednie, np. wpisy nowych użytkowników umieszczane są po zatwierdzeniu, a zarejestrowanych i potwierdzonych gości – od razu.
Choć moderacja nie jest rozwiązaniem doskonałym – wymaga stale działania człowieka, który zatwierdza wpisy, poza tym jest mocno problematyczna przy dużej ilości dodawanych treści. Optymalnym rozwiązaniem jest połączenie moderacji z szeregiem innych modułów filtru antyspamowego, dzięki czemu to właściciel strony zawsze ma ostateczny głos w sprawie klasyfikacji treści jako (nie)pożądanej.
Każdy poważny system antyspamowy powinien mieć możliwość korygowania jego działania poprzez decyzje człowieka, który najlepiej jest w stanie rozwiać wszelkie wątpliwości w sprawie rodzaju i charakteru dodawanych treści. Ostatecznym celem działania filtrów antyspamowych powinno być więc nie tyle całkowite wyeliminowanie spamu (gdyż jest to niemożliwe, zwłaszcza bez błędnego blokowania treści poprawnych), lecz znaczne jego ograniczenie (na poziomie >90%) i przekazanie wątpliwości do oceny przez człowieka.
Dokonanie odsiewu treści, co do których jesteśmy pewni, że są spamem, możemy dokonać dzięki analizie zachowania botów i danych przez nich dodawanych, a także sprawdzeniu, czy odwiedzający witrynę użytkownik jest człowiekiem, a nie botem.
Analiza nagłówków HTTP
Metoda ta stanowi pierwszą zaporę przed wszelkiego rodzaju niepożądanymi odwiedzinami robotów internetowych, nie tylko spamujących, ale również zbierających adresy e-mailowe czy przeprowadzających ataki, wykorzystując dziurawe oprogramowanie. Zasada działania tego typu filtrów polega na analizie wysyłanych przez odwiedzającego żądań HTTP i porównywaniu ich ze znanymi, normalnymi schematami działania popularnych przeglądarek, używanych przez zwykłych użytkowników.
Zasada działania podstawowych filtrów polega na sprawdzaniu takich nagłówków jak HTTP_REFERER czy USER_AGENT, jednak coraz bardziej wyszukane narzędzia spamerów potrafią się bardzo dobrze podszywać pod zwykłego użytkownika, dlatego konieczne jest zastosowanie bardziej zaawansowanych mechanizmów obronnych. Napisanie samemu skutecznego filtru na poziomie nagłówków HTTP wymaga sporej wiedzy i dużego doświadczenia w administracji serwisami internetowymi, dlatego dobrym rozwiązaniem jest sięgnięcie po gotową aplikację.
Na uwagę zasługuje tu zestaw skryptów PHP o nazwie Bad Behavior, rozwijany stale od 2005 roku i dostępny na licencji GNU GPL. Podstawowa instalacja tego systemu sprowadza się do dodania jednej linii kodu, nie są więc wymagane żadne zaawansowane umiejętności, aby tego dokonać. Istnieją również gotowe wtyczki (tzw. connectors), pozwalające na łatwą integrację Bad Behavior z popularnymi aplikacjami, takimi jak Drupal, Joomla, WordPress czy MediaWiki.
Bad Behavior działa na poziomie nagłówków HTTP, blokując wysyłanie jakichkolwiek danych do końcowego użytkownika, jeśli ten rozpoznany jest jako niepożądany bot. Niesie to ze sobą wiele zalet, pośród których warto wyróżnić oszczędność transferu i fakt, że bot nie będzie mógł ze strony wyłuskać żadnego adresu e-mailowego – jedyne co zobaczy, to komunikat błędu (4xx).
Łatwość instalacji i skuteczność tej aplikacji powoduje, iż stanowi ona znakomitą pierwszą linię obrony nie tylko przed spamem, ale także przed wieloma innymi, popularnymi atakami na systemy internetowe. \”BB\” nie ogranicza się bowiem wyłącznie do samego spamu, lecz skupia się na metodach, za pomocą których tego typu ataki są przeprowadzane.
Opisywane rozwiązanie jest bardzo podobne do modułu Apache o nazwie mod_security, z tą różnicą, że w przypadku Bad Behavior nie potrzebujemy dostępu do konfiguracji serwera, co zazwyczaj ma miejsce jedynie w przypadku serwerów dedykowanych i kolokacji.
Istotnym aspektem, w przypadku rozwiązań działających przy nawiązywaniu komunikacji z przeglądarką, jest niewielki margines błędu, na jaki można sobie pozwolić. Wyobraźmy sobie sytuację, że zablokowane zostanie wysłanie strony do prawidłowego, normalnego użytkownika – nie zobaczy on w ogóle witryny, nie znajdzie adresu kontaktowego do nas i tak naprawdę będzie myślał, że strona po prostu nie działa. Są to sytuacje bardzo mocno niepożądane, na szczęście autor Bad Behavior zapewnia, że mają one miejsce bardzo rzadko, a jeśli już do nich dojdzie – służy on swoją pomocą w zlokalizowaniu i usunięciu problemu.
Analiza danych
Najczęściej stosowanym zabezpieczeniem przed formularzowym spamem jest analiza treści, które zostały przez niego przesłane do serwera. Jest to krok absolutnie niezbędny. Brak jakiejkolwiek weryfikacji danych pochodzących z formularzy jest niedopuszczalny i stanowi podstawowy błąd początkujących programistów.
Zasadnicze aspekty, które powinny ulec sprawdzeniu, to długość i typ wpisanych przez użytkownika treści. Możemy być pewni, że coś jest nie tak, jeśli np. w polu \”Autor\” wysłano ciąg 1000 znaków lub w polu \”Wiek\” podano adres URL. Dokonanie podstawowej kontroli tego typu jest sprawą bardzo prostą, w PHP możemy jej dokonać używając funkcji {stala}strlen(){/stala} oraz wyrażeń regularnych.
W przypadku projektowania formularzy kontaktowych, przy budowie których używana jest funkcja {stala}mail(){/stala}, należy zadbać o dodatkowe operacje kontrolne. Bardzo często w formularzach widnieje np. pole \”Adres e-mail nadawcy\”, którego zawartość jest dołączana w czwartym argumencie
funkcji {stala}mail(){/stala}, w postaci {stala}\’Reply-to: \’.$nadawca.\'{/stala}. Jest to rozwiązanie niebezpieczne,
pozwalające napastnikowi na dodanie dowolnych nagłówków, poprzez odpowiednie spreparowanie zawartości pola z adresem e-mailowego nadawcy.
Wystarczy np. dodać kilkaset nagłówków BCC (ukryte kopie), ażeby wykorzystać serwer do wysyłki spamu. Jak się przed tym zabezpieczyć? Poza określeniem
maksymalnych długości pól, warto sprawdzić występowanie w nich takich nagłówków jak \”Content-Type\”, \”MIME-Version\”, \”BCC\” czy \”Content-Transfer-Encoding\”. Przykładowa funkcja wykonująca takie sprawdzenie pokazana jest w listingu.
setCommentAuthor($name);
$akismet->setCommentAuthorEmail($email);
$akismet->setCommentAuthorURL($url);
$akismet->setCommentContent($comment);
$akismet->setPermalink(\'http://www.adres.strony.pl/wpis10/\');
if(!$akismet->isCommentSpam())
// dodanie komentarza
}
?>
function checkField($field){
$badTags=array(\'MIME-Version\',\'BCC\',\'Content-Transfer-Encoding\',\'MIME format\',\'Content-Type\');
foreach ($badTags as $badTag) {
if (stristr($field,$badTag)){
return false;
}
}
return true;
}
Skutecznym rozwiązaniem w walce ze spamem linkowym jest zastosowanie filtru, wyłapującego podejrzane słowa i frazy. Większość spamu reklamuje tak naprawdę grupę tych samych produktów czy usług, po krótkiej analizie jesteśmy więc w stanie określić listę słów, które są potencjalnie niebezpieczne. Pojawia się tutaj jednak problem z aktualizacją tego typu filtrów – bez stałego uzupełniania ich o nowe frazy będą się one stawały coraz bardziej zawodne.