Spam na Blox, czyli jak nie implementować CAPTCHA.

Od dłuższego czasu serwis blogowy Blox boryka się z plagą spamu. Słyszałem zapewnienia, że moderatorzy/admini walczą z tym zjawiskiem, ale wydaje mi się, że bez większych sukcesów, a nawet, że problem spamu się nasila. Jest to zjawisko dla wszystkich (poza spamerami) niekorzystne, a nierzadko na stronie głównej o pewnych porach spamy stanowią 30 i więcej procent wpisów.

Postanowiłem zerknąć na proces zakładania konta od początku. Pierwsze co rzuciło mi się w oczy, to prostota CAPTCHA. Być może parę lat temu wystarczało coś takiego, by odstraszyć spamerów, ale wojna trwa – istnieją narzędzia do automatycznego rozpoznawania nawet dość skomplikowanych CAPTCHA ze stosunkowo dużą pewnością (grubo ponad 50%). Niedawno nawet Jogger, który pozwalał właścicielowi bloga na mocne zmiany wyglądu CAPTCHA (kształt, wielkość, kolor), przy komentarzach dorzucił do niej litery obok cyfr, bo spamerzy się przebijali…

Żeby sprawdzić, czy nie przypadek, że CAPTCHA jest taka słaba, wcisnąłem F5, raz, drugi, trzeci… I okazało się, że trafiłem na powtarzające się słowa. Chwilę się pobawiłem i faktycznie, nie da się ukryć, CAPTCHA powtarza się i to – na oko – często. Postanowiłem sprawę zbadać dokładniej.

Sposób badania: uruchomienie przeglądarki, wyczyszczenie historii, w każdej serii 50 przeładowań strony (F5 lub ctrl-r), zapisanie wyników do pliku (każdy wynik w pojedynczej linii) w takiej kolejności, w jakiej się pojawiały. Żeby wykluczyć wpływ User Agent i czasu, każda seria wykonywana na różnej przeglądarce i w odstępie minimum kilkudziesięciu minut.

W pierwszej serii (przeglądarka chromium) 50 ciągów wyrazów wystąpiły 32 unikatowe ciągi, przy czym 4 wystąpiły trzykrotnie, 10 dwukrotnie, a 18 tylko raz. Dodatkowo rzuciła mi się w oczy prawdopodobna metoda powstawania wielu CAPTCHA – podział słowa na sylaby, połączone z ew. wyrzuceniem niektórych liter, a następnie wymieszanie tych slab. Przykładowo zykamu i kazymu (czyli muzyka), letefon, fontele i fonlete (czyli telefon), zetagagataze (czyli gazeta), lafiorka, fiorkala, fiorlaka (czyli kalafior).

Druga seria, kilkadziesiąt minut później na midori – 34 unikatowe ciągi, jeden wystąpił czterokrotnie, 13 dwukrotnie, 20 jednokrotnie. Wyrazy zdecydowanie powtarzają się między seriami – dla obu serii łącznie wystąpiło 46 unikatowych ciągów, 2 wystąpiły pięciokrotnie, 6 – czterokrotnie, 8 – trzykrotnie, 12 -dwukrotnie, 18 – jednokrotnie.

Ponieważ ciąg znaków pod którym można poprać losowany obrazek może być stały (z danego można korzystać wiele razy), postanowiłem uprościć sobie pobieranie i przeliczanie. Szybki skrypt, który przy pomocy wget pobiera zadaną ilość obrazków i zapisuje do kolejnych plików, a następnie sprawdzenie sum kontrolnych (md5) tychże plików. I tu ciekawostka – sumy kontrolne praktycznie się nie powtarzają. Sprawdziłem organoleptycznie i faktycznie – o ile wyrazy powtarzają się często, to praktycznie każdy plik jest binarnie inny. Czyli raczej mała ilość wyrazów raczej nie wynika z chęci cache’owania.

Dla porządku: dla 100 plików 3 miały takie same sumy kontrolne, a kolejne 5 sum występowało dwa razy. Powtórzyłem eksperyment dla 1000 plików. Pojawiło się 611 unikatowych sum kontrolnych, jedna z sum występowała 7 razy, jedna 6, sześć wystąpiło 5 razy, cztery – 20 razy, trzy – 53 razy, dwie – 188 razy i jedna – 342 razy.

Nie sprawdzałem dokładnie, czy dany wyraz w CAPTCHA koreluje z ciągiem w treści (na oko nie), ani z jaką skutecznością zadziała automatyczne rozpoznawanie, ale przy tak częstym powtarzaniu się ciągów znaków i plików nie ma to znaczenia – wygląda, że baza jest za mała, a przekształcenie zbyt proste i można spokojnie stworzyć skrypt, który porówna sumę md5 wygenerowanego pliku z arbitralną bazą.

O problemie pisałem wstępnie na forum, póki co bez odzewu. W każdym razie liczę na to, że wpis zmotywuje administratorów blox do załatania ewidentnej dziury w zakładaniu nowych kont. Obecne likwidowanie spamerskich blogów przypomina wylewanie wody z łódki, zamiast załatania w niej dziury, przez którą wody nabiera.

Oczywiście najlepsze byłoby podpięcie jakiegoś znanej, sprawdzonej implementacji CAPTCHA, zamiast wymyślania koła od nowa (i to sugestia dla tych, którzy chcą stosować tego typu rozwiązanie) ale wydaje się, że nawet z istniejącą implementacją można prosto zadziałać w taki sposób, że stanie się ona choć w części efektywna. Przede wszystkim mam na myśli zwiększenie bazy słów i ilości przekształceń.

Obok złych wiadomości są też i dobre – co prawda problem nie jest to Blox, tylko ogólnie dotyczy konto.gazeta.pl, ale – jak wynika z korespondencji z administratorami Blox – jest znany i ma być najdalej w kwietniu poprawiony. Pozostaje uzbroić się w odrobinę cierpliwości i liczyć na to, że po załataniu dziury uda się skutecznie pozbyć spamerów. W tej chwili bywa tak, że 100% wpisów na głównej stanowią spamy…

Krytyczny rzut oka na doLoop.

Na informację o serwisie doLoop natknąłem się podczas lektury bloga o najlepszych dodatkach do blogów. W skrócie jest to wymiana ruchu – ja linkuję kogoś, ktoś linkuje mnie. Z grubsza tematycznie, tzn. można wybrać, jaką tematykę chcemy linkować i określamy kategorię tematyczną własnych wpisów. Postanowiłem wypróbować, jak to działa i co to daje.

Zaczęło się niezbyt dobrze. Po pierwsze, na stronie serwisu doLoop (obecnie 404) nie ma regulaminu (AKA ToS). Jest FAQ, które coś tam wyjaśnia, ale normalnego regulaminu nie ma. Niefajnie, bo nie musi być nie wiadomo co, ale wystarczyłoby w kilku punktach opisać warunki korzystania z serwisu.

Po drugie, zamieszczanie linka w serwisie jest całkowicie ręczne. Po prostu trzeba wklepać linka, opis, tagi. Wszystko ręcznie, bez możliwości skorzystania z automatów typu javascript i zamieszczenia danych typu tytuł czy tagi automatycznie (OK, tytuł może zaciągnąć automagicznie z URLa). Co przecież jest jak najbardziej wykonalne – Folksr to potrafi. Marnym pocieszeniem – przynajmniej dla mnie – jest możliwość dodania kanału RSS i wybierania postów do dodania z niego.

Na dodatek wymagane jest dodanie zdjęcia. Po prostu i zwyczajnie nie da się zamieścić wpisu bez zdjęcia. Na dodatek zdjęcie musi pasować do treści. W praktyce pewnie czeka mnie szukanie jakichś zdjęć na licencji Creative Commons, albo – raczej – public domain, bo CC wymaga podania autora o co trudno w tej sytuacji. Za robieniem własnych fotek/zrzutów nie przepadam. Nawet do wpisów, co dopiero do zajawek o wpisach.

Po trzecie, mail z potwierdzeniem odbioru prośby rejestracji, który przyszedł, miał skopane pl-znaki w temacie, co wygląda delikatnie mówiąc mało profesjonalnie. Mail z potwierdzeniem dodania do serwisu, który dotarł po około 12 godzinach – to samo. No ale skoro dobrnęliśmy do tego momentu, to kontynuujmy…

Pozytywem jest bardzo dużo opcji wyglądu widgetu. Powiedziałbym nawet, że za dużo i chyba wolałbym podział na widok podstawowy i zaawansowany. Ale domyślne ustawienia praktycznie nie wymagały korekty (no dobrze, rozmiar zdjęć zmieniłem, ale to podstawa).

Testowe zamieszczenie pierwszego wpisu – wypełnianie ręczne dla pojedynczego jest niby do przeżycia, ale na dłuższą metę będzie męczące jak dla mnie – m. in. dlatego nie korzystam z Wykopu czy nie dodaję wpisów do katalogu Flattr. Bardzo fajną rzeczą jest możliwość podania linka do zdjęcia, a następnie prostego wykadrowania i – w razie potrzeby – pomniejszenia w przeglądarce. Przynajmniej nie trzeba uruchamiać edytora grafiki.

Za to czas moderacji wpisu to jakiś koszmar – rozumiem, że jest robione ręcznie i uprzedzają w FAQ moderacja postów trwa przeważnie do 12 godzin, ale kilkadziesiąt godzin to trochę przesada. Przynajmniej na początku drażni, kiedy się czeka na efekty, potem nie przeszkadza w ogóle – przestałem zwracać uwagę na czas moderacji.

Inne niefajne rzeczy:

  • Po zgłoszeniu błędu zero informacji o przyjęciu, zero informacji, czy będzie naprawiany i kiedy.
  • Błędy ortograficzne – po dodaniu do czarnej listy proszę odświerzyć stronę.
  • Mimo zaznaczenia przy zakładaniu konta, żeby „atrakcyjnych dziewczyn” nie pokazywało i wyłączania kategorii Sexy, zdarzają się praktycznie gołe dupy na zdjęciach. Znaczy w stringach. Można to oczywiście blokować blacklistą, ale jakby nie takie jest założenie. I niestety nie można zablokować konkretnego wydawcy w całości.
  • Problemy z pl-znakami – występują i w mailach, i przy pobieraniu danych o tytule wpisu. To pierwsze to wina doLoop, to drugie może być winą Blox i archaicznego kodowania pl-znaków.

Nie miałem przypadku, by dodawany wpis został odrzucony, za to męczące jest ograniczenie w dodawaniu wpisów – w praktyce mogłem dodawać po jednym wpisie dziennie – przypuszczam, że chodzi o swoiste zabezpieczenie antyspamowe. Rozrzut CTR (stosunek wyświetleń reklamy danego posta do wejść) mam spory, bo od ok. 1,3% (beznadziejne zdjęcie) do ok 20% (świeży wpis, CTR spada z czasem).

Wyniki, czyli część najważniejsza, bo widget dodaje się w celu zwiększenia ruchu na stronie (albo przyciągnięcia nowych czytelników, jak w moim przypadku). W FAQ piszą przeważnie można liczyć na od 150% do 200% zwiększenia ruchu na twojej stronie po zainstalowaniu widgetu doLoop. Na mój gust o zero za dużo, przynajmniej na tym blogu. 20% jest za to jak najbardziej osiągalne. Wiele zależy od dodanych wpisów – liczy się i opis (tu nie szalałem, po prostu tytuł z bloga), i zdjęcie. W testowym okresie, wynoszącym 14 dni, unikalne wejścia z doLoop stanowiły ok. 15% wszystkich UU.

Ogólne zadowolenie – 4/10, na razie zostawiam to, co jest, zobaczę jak będzie wyglądało w dłuższym okresie (będzie aktualizacja statystyk). I rozglądam się za alternatywami.

UPDATE: No i jednak doLoop okazał się happeningiem, jak wskazywały na to niektóre rzeczy typu brak ToS czy orty. Od paru dni(!!!) strona główna pokazuje Błąd bazy danych!! Znaczy się do piachu.

Porównanie LinkWithin i Folskr.

Zauważyłem, że ostatnio sporo ludzi z Blox interesuje się wspomagaczem linkowania LinkWithin (znanego również jako You might also like). Rozwiązanie, choć proste i popularne, niekoniecznie jest najlepsze. Postanowiłem szybko porównać LinkWithin i Folksr, którego integrację z Blox opisywałem kiedyś (patrz też wpis o Folksr na wiki Blox).

Oba rozwiązania są darmowe, działają z różnymi systemami blogowymi i mają na celu proponowanie ludziom podobnych – czyli potencjalnie również interesujących – wpisów. Parę cech różniących oba rozwiązania:

LinkWithin:

  • bierze pod uwagę temat, tagi i treść (chyba w tej kolejności, patrząc na efekty u mnie temat jest bardzo istotny)
  • potrafi sam dobrać wygląd w zależności od dostępności bądź braku zdjęć w linkowanych wpisach
  • linkuje tylko do wpisów z danego bloga
  • brak kontroli nad działaniem
  • prosta konfiguracja i implementacja
  • nieznany dokładny algorytm
  • brak statystyk (nieco widać w zwykłych, zewnętrznych)
  • tylko wersja angielska
  • bardzo popularny

Folksr:

  • bierze pod uwagę tylko na tagi (ew. kategorie; ogólnie: przekazane wprost parametry)
  • jednoznaczne, stałe dla całego serwisu określenie wyglądu linkowanych wpisów
  • linki z wszystkich blogów w Folksr, tylko wybranych („znajomych”), tylko tych, które pozwalają pokazywać także nasze linki lub tylko z naszego bloga (wybieramy samodzielnie)
  • pełna kontrola nad działaniem
  • stosunko skomplikowana konfiguracja i implementacja (patrz opis na wiki)
  • w pełni znany algorytm
  • statystyki wejść i wyjść z użyciem Folksr (osobno wejścia i wyjścia dla każdego wpisu)
  • polska i angielska wersja językowa
  • mało popularny

Ocena

Pierwsze dwa punkty to moim zdaniem remis – jednemu może bardziej odpowiadać automatyka, drugi będzie wolał większą przewidywalność. Po prostu rzecz gustu. Niestety, na Blox trochę psują efekt kiepsko zaimplementowane tagi.

Punkt trzeci to zdecydowana przewaga Folksr – w prosty sposób pozwoli na wymianę ruchu między kilkoma swoimi serwisami, albo serwisami o podobnej tematyce, jeśli tylko korzystają z Folksr.

Punkt czwarty – punkt dla Folksr. Nieduży, bo nie każdemu zależy na kontroli, ale jednak.

Punkt piąty – LinkWithin kliknąłem w minutę. Z Folksr było więcej zabawy, choć tak naprawdę nie jest to trudne, jest opisane i robi się to raz… Punkt dla LinkWithin.

Punkt szósty – kolejny punkt dla Folksr, choć znowu raczej nie dla każdego znajomość algorytmu będzie istotna.

Kolejne dwa punkty to zdecydowana przewaga Folksr. Statystyki są fajne, od razu widać, do których wpisów wchodzą ludzie, i z jakich wychodzą przy pomocy linków. Z serwisu zawsze prościej i wygodniej korzystać po polsku. Szkoda jedynie, że nie można wprost wybrać języka, wybór jest dokonywany automatycznie na podstawie ustawień w przeglądarce. UPDATE: jak trafnie zauważono w komentarzu, można samemu wybrać język.

Ostatni punkt to przewaga LinkWithin. Łatwiej o pomoc, teoretycznie większą pewność działania i przyszłość ma serwis popularny… Folksr, choć nie jest pierwszoplanowym projektem autora działa, jest funkcjonalny, ale ostatnie zmiany były dawno temu, a ilość nowych blogów, które z niego korzystają nie powala. Niemniej autor zapewnia, że serwis ma się dobrze.

Podsumowanie

Ostatecznie moim zdaniem wygrywa Folksr przewagą 5 punktów do 2 (w kolejnych 2 punktach remis).

Dla jasności: nie jestem w żaden sposób związany z Folksr. Po prostu go lubię, używam i wydaje mi się, że jest ciekawą polską alternatywą dla LinkWithin. Dodatkowo o większych możliwościach.