Jak bronić WordPressa przed spamem w komentarzach

We wrześniu ub.r. pisałem o wtyczce „Spam Free WordPress”, chroniącej bloga przed atakami botów, zamieszczających spamerskie komentarze. Wtyczka przez długi czas skutecznie chroniła InterJAK-a przed komentarzowym spamem, ale najwyraźniej akcja rodzi reakcję: pojawił się nowy rodzaj botów, atakujących o tyle sprytnie, że z pominięciem strony WWW. W efekcie zacząłem dostawać dziennie kilkadziesiąt „komentarzy” z anglojęzycznym bełkotem do moderacji. Trzeba było działać. Jak?

Spamerzy atakują bloga

Rozwiązanie znalazłem, grzebiąc w ustawieniach wtyczki Spam Free WordPress – była to wskazówka, dotycząca modyfikacji dwóch lub trzech skryptów, będących składnikami WordPressa. Anglojęzycznych Czytelników odsyłam od razu do źródła, a więc do tekstu „Block Remote Comments on a WordPress site”. Ze swojej strony mogę powiedzieć, że zalecane tam modyfikacje wykonałem, zajęło mi to kilka ledwie minut, a efekt jest taki, że boty odbijają się jak muchy od szyby: koniec spamu.

Boty, o których mowa, wykorzystują jako swoisty drogowskaz wyrażenie „comment”, zawarte w dwóch lub trzech plikach, współtworzących WordPressa. Mogą dzięki temu wysyłać „komentarze” do bazy danych bez odwiedzania strony. Jeśli nasz blog znajdzie się w spamerskiej bazie danych, będzie odtąd bombardowany obcojęzycznymi bredniami, oczywiście zawierającymi linki do cudzych stron. Kto – jak ja – moderuje komentarze, będzie miał masę niepotrzebnej pracy, kto nie moderuje – dorobi się „farmy linków”. A wystarczy zamienić w kilku liniach kodu wyrażenie „comment” na dowolne inne (byle to samo we wszystkich modyfikowanych liniach), by spamerska akcja spaliła na panewce.

Za autorem tego rozwiązania, Udarem Gromovem, podaję więc, że do wykonania są trzy etapy:

1. W głównym katalogu WordPressa znajdujemy plik „wp-comments-post.php”, a w nim linię:

$comment_content = ( isset($_POST[‚comment’]) ) ? trim($_POST[‚comment’]) : null;

i zamieniamy ją na:

$comment_content = ( isset($_POST[‚cosinnego’]) ) ? trim($_POST[‚cosinnego’]) : null;

Teraz możliwość komentowania jest w ogóle wyłączona (można sprawdzić).

2. W podkatalogu /wp-includes znajdujemy plik „comment-template.php”, a w nim linię:

<textarea id=”comment” name=”comment” cols=”45″ rows=”8″ aria-required=”true”>

i zamiast niej wstawiamy:

<textarea id=”comment” name=”cosinnego” cols=”45″ rows=”8″ aria-required=”true”>

Powinny być po sprawie. W tym miejscu należy wejść na stronę dowolnego wpisu i spróbować dodać komentarz. Jeśli się uda – gotowe.

3. Niektóre szablony WordPressa nadpisują jednak to, co powyżej – dlatego, jeśli próba wykonana po pkt. 2 wykazała, że nadal nie można komentować, trzeba zająć się edycją skryptu obsługującego komentarze w ramach szablonu. Powinien to być skrypt „comments.php”. Znajdujemy w nim linię:

<textarea id=”comment” name=”comment” cols=”45″ rows=”8″ aria-required=”true”>

…i znów zastępujemy, jak poprzednio:

<textarea id=”comment” name=”cosinnego” cols=”45″ rows=”8″ aria-required=”true”>

Oczywiście, przykładowe „cosinnego” to jedno i to samo wyrażenie we wszystkich modyfikowanych liniach.

Wszystkim, których dręczą spamerskie boty, polecam serdecznie 🙂