WordPress antyspam

Po raz kolejny musiałem zająć się problemem spamu w komentarzach na blogu. Przesiadka na hCaptcha pomogła na dłuższy czas, ale pod koniec lipca zabezpieczenie przestało działać[1]. Chwilę po tym, jak pojawiły się pierwsze komentarze, które przeszły hCaptcha, ruszyła lawina. Może raczej lawinka, bo 1-2 spamy dziennie to niewiele. Tak czy inaczej, wygląda, albo że spamerzy, że spamerzy szybko się uczą, albo mają bazę, który blog jaką ma captchę[2], albo hCaptcha istotnie się pogorszyła, albo ilość prób wzrosła na tyle, że coś się zaczęło przebijać[3]. A może wręcz znaleziono sposób na jej omijanie? Tematyka i języki różne, bez ładu i składu. Jedyne co pamiętam, to że zaczęło się od Azji, konkretnie pierwsze spamy wysłane w tej serii do mojego WordPressa były po… wietnamsku.

Garść statystyk

Zamieściłem statystyki poprzednio, więc zrobię to i teraz. Pomiędzy 20.06.2021 a 23.07.2022 zupełny brak spamu. W okresie od 23.07.2022 do 08.11.2022 73 sztuki. W 108 dni średnio 0,67 spamu na dobę. OK, to nie 1-2 dziennie, ale nadal sporo.

CAPTCHA

Moją pierwszą reakcją było zwiększenie trudności w panelu hCaptcha. Z najniższej na średnią. Niestety, nie zauważyłem spodziewanego efektu. Rozważam jeszcze powrót do reCAPTCHA. Jeśli spamerzy faktycznie mają bazę z typem zabezpieczeń na danym blogu, to taka zmiana może nieco popsuć szyki. Niemniej, skoro kiedyś nie dawała rady, to czemu teraz miałaby pomóc? Inna opcja to zwiększenie trudności do maksimum. Tylko to utrudni też życie zwykłym czytelnikom, a tego nie chcę.

Blokowanie IP

Zauważyłem, że IP z których zamieszczany jest spam w komentarzach, są raczej wątpliwej reputacji. Zatem kolejnym krokiem, połączonym z migracją hostingu, było zablokowanie na iptables z wykorzystaniem ipset tych IP, które są listowane w wybranych listach projektu firehol. Nieco pomogło na spam, zdecydowanie nie całkowicie. Ale i tak gorąco polecam to rozwiązanie, bo ilość ruchu z tych IP jest całkiem spora[4]. Niczego pozytywnego ze strony botnetów, open proxy itp. wynalazków się nie spodziewam, więc czemu nie zablokować?

Wtyczki

Skoro wycinanie IP nie pomogło, to pora sięgnąć po broń ostateczną. Tu jest WordPress, tu się instaluje wtyczki! Wtyczek obiecujących rozwiązanie spamu w komentarzach jest dla WordPressa sporo.

Akismet

Ponieważ kolejny raz polecono Akismet w komentarzach wpisu, więc zacząłem od niego. Pamiętam, że kiedyś już się przymierzałem do tego rozwiązania i odrzuciłem je. Po pierwsze, wymaga założenia osobnego konta. To mógł być wtedy wystarczający powód do odrzucenia. Po drugie, Akismet jest płatny. Tzn. teoretycznie jest pay what you want, ale nie da się zapłacić $0, jeśli ma się jakiekolwiek reklamy na blogu. Zaś what you want to minimum $1 miesięcznie. Tak się składa, że na niektórych stronach mam reklamy. Przynoszą grosze, ale są, a zakładanie konta, podawanie karty kredytowej to trochę za dużo, żeby przetestować rozwiązanie. Poza tym, skończyło by się tak, że wyświetlam reklamy, aby zapłacić za wtyczkę blokującą spam. Za którą muszę płacić, bo mam reklamy.

Antispam Bee

Kolejna popularna wtyczka antyspamowa dla WordPressa to Antispam Bee. Jest darmowa, wygląda sensownie, ma sporo więc dostała szansę. Trochę zdziwiło mnie działanie. Po włączeniu chciałem przetestować, wysłałem komentarz i… bez zmian, trafił od razu do moderacji, bez żadnych oznaczeń. Aż zwątpiłem, czy wtyczka działa przed moderacją, czy po. Jednak pierwszy spam pokazał, że wtyczka działa. Przed moderacją, a wykryty spam już nie niepokoi moderatora. Gdybym nie włączył powiadomień mailem, to bym nie zauważył. Znaczy pełen automat. Potrzeba trochę czasu, by ocenić skuteczność, ale wygląda obiecująco.

[1] Być może ma to jakiś związek ze zmianą hostingu, która koreluje czasowo. Tylko to mogłoby tłumaczyć jedynie znalezienie bloga, nie działanie zabezpieczeń.
[2] Tylko wtedy szkoda, że chyba nie ma w tej bazie pola „ręczna moderacja komentarzy, odpuść sobie”.
[3] Już po napisaniu tego wpisu zrobiłem szybką analizę i faktycznie, z ruchu wytypowanego jako boty zamieszczające spam, 95% dostaje HTTP status code 400. Pozostałe 5% dostaje 200.
[4] Aktualnie korzystam z dwóch list: stopforumspam oraz blocklist.net.ua. Kompromis między ilością IP (ok. 300 tys.), a efektem. Może się zmieniać, bo dodanie kolejnej listy jest trywialne.

Hacktoberfest 2022

W tym roku ponownie uczestniczyłem w Hacktoberfest. Początkowo wydarzenie traktowałem sceptycznie. Zresztą słusznie, bo problem mało istotnych commitów i spamu jak najbardziej istnieje. Potem jednak stwierdziłem, że to fajny motywator, żeby coś zrobić w open source. Zabawę z Hacktoberfest zacząłem więc w 2020, z repozytoriami nie uczestniczącymi oficjalnie w Hacktoberfest.

W zeszłym roku dołączyłem do firmowego wydarzenia. W ramach gry we własną grę, bawiliśmy się w zbieranie jak największej ilości gwiazdek. Czyli robienie commitów do repozytoriów z ich jak największą ilością. W duchu fair play, czyli bez spamu i poprawiania literówek. Trochę taki CTF.

Zatem w pełnym wymiarze uczestniczyłem w Hactoberfest 2021. Mógłbym dodać and all I got was this lousy t-shirt. Bowiem po spełnieniu warunków na odpowiednią liczbę commitów można było wybrać nagrodę – koszulkę lub zasadzenie drzewa. Lubię t-shirty, więc wybrałem koszulkę, mimo średniego koloru. Przy okazji dowiedziałem się, ile kosztuje darmowa koszulka po przejściu przez cło i Pocztę Polską. Otóż w 2021 przy deklarowanej wartości przesyłki $5,95, naliczono 5 zł VAT oraz 8,5 zł opłaty pocztowej. Razem 13,5 zł, czyli mniej więcej połowa wartości paczki. Zaś sama paczka dotarła w marcu 2022. Dowód:

Opłaty za koszulkę Hacktoberfest - Poczta Polska
Opłaty za koszulkę Hacktoberfest. Źródło: fot. własna

Nie powinno zatem dziwić, że w tym roku wybrałem posadzenie drzewa zamiast koszulki. Tegoroczny Hacktoberfest to trochę kontynuacja poprzedniego. Znowu zbieranie gwiazdek z ekipą z firmy. Z drugiej strony jest to powrót do korzeni, bo moje tegoroczne commity to głównie tłumaczenia do tldr. A przecież przygodę z open source zaczynałem od tłumaczeń w ramach Polish Debian Documentation Project, potem tłumaczyłem na polski w ramach GNU Polish Translation Team.

Oczywiście były też commity związane z kodem, oczywiście w Pythonie. I tu spostrzeżenie, że ludzie potrafią znaleźć błąd, zdebugować go, znaleźć miejsce, gdzie powinien być poprawiony i… założyć issue, wszystko pięknie opisując. Nie oceniam bo przyczyny mogą być różne, choć dziwię się, bo nakład pracy na założenie issue na GitHub z pięknym udokumentowaniem błędu i debugiem jest IMVHO większy, niż poprawka w kodzie. W każdym razie widać, że warto commitować i poprawiać takie drobne błędy.

Pojazdy drugiej kategorii

Rowerem jeżdżę, ale raczej niewiele i raczej używam go jako środka transportu w mieście. Widać to choćby po statystykach rocznych. Można się do wielu rzeczy przyczepić w sprawie organizacji ruchu rowerowego w miastach, ale jakieś ścieżki są i powiedzmy, że da się żyć. Choć oczywiście wiele można poprawić.

W tym roku jednak wybrałem się rowerem na wakacje, w dłuższą trasę, za miasto. Dla ustalenia uwagi, rower to tzw. góral, wypad miał charakter przejazdu z miejsca na miejsce, więc jechałem tylko z małym plecakiem, a długość trasy to nieco ponad 60 km w każdą stronę. Taki wypad świetnie pokazuje, w jak fatalnym stanie jest infrastruktura rowerowa w Polsce.

Zaczęło się niewinnie, tuż za Poznaniem. Ścieżka rowerowa była wzdłuż ruchliwej drogi, ale tylko z jednej strony, dla ruchu rowerowego w obu kierunkach. Nic w tym złego. Pod warunkiem, że ścieżka jest cały czas po tej samej stronie drogi, a nie zmusza się rowerzystę do stania na światłach i przechodzenia na drugą stronę co małe kilkaset metrów. Serio, więcej stania, niż jechania. Totalne wybicie z rytmu i spowolnienie jazdy. Analogia samochodowa: zupełnie jakby ktoś wpadłby na pomysł, by na drodze ruchu szybkiego robić światła co kilometr. No ale cieszmy się, że coś jest, prawda?

Radość nie trwała długo. W pewnym momencie ścieżka się skończyła na skrzyżowaniu z jakąś ulicą, pojawił się znak informujący o końcu ścieżki rowerowej (C-13a) i… tyle. Cóż robić, trzeba udać się na jezdnię. Zmieniam stronę na właściwą (ścieżka była po lewej stornie drogi) i… zauważam tuż za skrzyżowaniem znak „zakaz wjazdu rowerów” (B-9). Rozglądam się, żadnej alternatywy nie widać, latać nie umiem…

Kawałek dalej ścieżka wróciła. Znaczy coś oznaczone jako ścieżka, pokryte asfaltem. Który kiedyś może był gładki, ale obecny stan nawierzchni był tragiczny. Masa drobnych, poprzecznych nierówności. Tu pierwszy raz cieszyłem się, że mam grube opony. Na góralu owszem, dało się jechać. Co prawda mało komfortowo, ale nie trzeba było nawet specjalnie zwalniać. W przypadku cieńszych opon miałbym obawy o całość sprzętu. Przy okazji taka sytuacja może być dobrym wytłumaczeniem, czemu widać rowery szosowe na jezdniach, gdy obok jest ścieżka. Jazda po czymś takim musiałaby być albo bardzo wolna, w okolicach prędkości marszu, albo raczej pewne jest uszkodzenie sprzętu. Analogia samochodowa: ta ścieżka była podobna, ale znacznie gorsza, niż poniemiecka droga z płyt betonowych do Świnoujścia (obecnie jest tam już asfalt).

Więcej nie opiszę, bo później infrastruktura rowerowa w zasadzie po prostu zniknęła. Tu i ówdzie przy miejscowościach pojawił się fragment, który owszem, może coś daje mieszkańcom, ale w kontekście ruchu turystycznego między miastami nie wnosi nic. Drogi, którymi jechałem też momentami raczej dla górala, bo gres czy piach to słaba nawierzchnia dla roweru. Ale to już może kwestia wyboru trasy przez nawigację – korzystałem ze standardowych Google Maps.

Na samych drogach generalnie było OK. Niewielki ruch, kierowcy zachowują odstęp. Jedyny wyjątek zdarzył się na zupełnie bocznej drodze między wioskami. Było zupełnie pusto, z naprzeciwka jechał samochód osobowy. Samochód, który mnie wyprzedzał postanowił – mimo zupełnie pustej drogi – zrobić to dokładnie w momencie zrównania się trzech pojazdów. Czyli zamiast przepisowego metra odstępu było jakieś 10 centymetrów. Serio, dawno nikt tak blisko mi nie podjechał.

Wrócę jeszcze tylko do momentu z lataniem, czyli urywającą się ścieżką i zakazem. Wracałem tą samą trasą i okazuje się, że oznaczenie informujące o końcu ścieżki rowerowej… należy zignorować. Dalej jak najbardziej można – a w kontekście oznaczeń wręcz należy – jechać rowerem. IIRC był kawałek ulicy, a potem ścieżka w lesie, do której wjazd był ukryty w krzakach. Sama ścieżka już bez oznaczeń, ale nadająca się do jazdy. Ale nie trzeba o tym informować rowerzysty, nawet napisem. Przecież wiadomo, że wszyscy okoliczne drogi znają. A jak ktoś nie zna, to niech szuka, prawda?

Krótko podsumowując sam wyjazd – jestem zadowolony. Dałem radę i ja, i rower. Mimo braku infrastruktury jechało się nie najgorzej. Czy powtórzę wypad w przyszłym roku? Nie wykluczam. Ale ze względu na brak infrastruktury na pewno nie wybiorę się na tego typu wypad z dziećmi.