Jak zablokować „złe” boty – poradnik .htaccess + lista 1801 botów

bad bot

Czy zdarzyło Ci się, że ruch na Twojej stronie w większości jest wytwarzany przez boty internetowe. Pochłaniają transfer i angażują niepotrzebnie moc procesora na serwerze. W skrajnych przypadkach mogą spowolnić działanie strony internetowej tak bardzo, że nie będzie ona wystarczająco szybka dla użytkowników. Z tego poradnika dowiesz się jak je zablokować.


Festiwal SEO 2018 Katowice

Do blokady botów najlepiej skonfigurować plik .htaccess. Na serwerze internetowym opartym o Apache to domyślny plik zawierający konfigurację. Taki plik może znajdować się w każdym katalogu. Ustawienia zawarte w pliku .htaccess – znajdującym się w głównym katalogu domeny na serwerze są dziedziczone do podkatalogów. Jeśli w podkatalogach znajdują się subdomeny, to również będą je obowiązywać ustawienia znajdujące się w głównym pliku.

Blokada botów z wykorzystaniem SetEnvIfNoCase oraz SetEnvIf

Mechanizm blokady złych botów na serwerach, które mają zainstalowany moduł apache mod_setenvif będzie wykorzystywał następującą, przykładową konfigurację pliku:

SetEnvIfNoCase ^User-Agent$ .*nazwa_złego_bota HTTP_SAFE_BADBOT
SetEnvIfNoCase ^User-Agent$ .*(inny_zły_bota|kolejny_zły_bot) HTTP_SAFE_BADBOT

Order allow,deny
Allow from all
Deny from env=HTTP_SAFE_BADBOT    

Serwer sprawdza zawartość nagłówka User-Agent i jeśli fragment jego nazwy pasuje do tej, która jest podana po znakach „.*”, to zostanie zwrócony kod odpowiedz 403 Forbidden. Znaki „.*” to fragment, który zastępuje dowolny ciąg znaków. Sprawdzenie nie będzie wrażliwe na wielkość liter w polu User-Agent. Można mieć więcej  wierszy zawierających nazwy złych botów, także dopasowania nazw w nawiasach mogą być dłuższe.

Blokada botów z wykorzystaniem RewriteCond i RewriteRule – serwer home.pl

Nie wszędzie jest zainstalowany moduł apache mod_setenvif. Niestety na współdzielonych serwerach home.pl nie ma tego modułu. Polecają zakupić w tym celu serwer dedykowany.

RewriteRule to reguły przepisywania adresów URL. Reguły wykonywane są jedna po drugiej. Wyjątkiem jest obecność w nawiasie kwadratowym L na końcu wiersza, co oznacza, że dana reguła jest ostatnia i kolejne reguły RewriteRule nie mają zostać wykonywane.

RewriteCond jest opcjonalnym wyrażeniem warunkowym, który musi być spełniony aby reguły w RewriteRule zostały wykonane. Umieszcza się je przed RewriteRule. Warunki sprawdzane są jeden po drugim ze spójnikiem logicznym AND (czyli wszystkie warunki muszą zostać spełnione). Jeżeli na końcu w nawiasie kwadratowym umieszczony jest warunek OR wystarczy spełnienie tylko jednego. Reguły RewriteCond dotyczą tylko i wyłącznie pierwszej reguły RewriteRule wpisanej za nimi.

Za regułami RewriteRule i RewriteCond mogą znajdować się flagi, jak:

  • [OR] – wiąże dyrektywę z następną (bezpośrednio po niej) dyrektywą RewriteCond związkiem logicznym OR(lub)
  • [NC] – wielkość liter nie ma znaczenia
  • [L] – ostatnia reguła RewriteRule do wykonania
  • [F] – zwróć kod odpowiedzi 403 Forbidden

Przykładowa konfiguracja pliku .htaccess w oparciu o RewriteEngine wygląda następująco:

RewriteEngineOn

RewriteCond %{HTTP_USER_AGENT} .*nazwa_złego_bota* [NC,OR]
RewriteCond %{HTTP_USER_AGENT} .*inny_zły_bot* [NC]
RewriteRule ^.* - [F,L]

Podobnie jak w pierwszym przykładzie, sprawdzana jest zawartość pola User-Agent i jeśli spełnia ono warunki reguły to zwracany jest kod odpowiedzi 403 Forbidden.

Blokada botów z pustym User-Agent

To dosyć wyjątkowy przypadek ale można go coraz częściej zaobserwować. Boty internetowe posiadają puste pole User-Agent, wobec czego powyższe reguły przepuszczą taki ruch. Bot, który ukrywa swoją tożsamość, na pewno nie jest warty wpuszczenia na stronę. Blokuje się go tak:

RewriteEngineOn

RewriteCond %{HTTP_REFERER} ^-?$ [NC]
RewriteCond %{HTTP_USER_AGENT} ^-?$ [NC]
RewriteRule .* - [F,L]

W powyższym przypadku blokowany jest ruch, kiedy zarówno pole User-Agent jest puste oraz puste jest pole Referer. Unikniemy wtedy wykluczenia ze strony użytkowników, którzy stosują stare programy antywirusowe, które ukrywają zawartość User-Agent.

Blokowanie adresów IPv4 i IPv6

Może zdarzyć się sytuacja, w której serwer obciążony jest przez ruch botów podszywających się pod przeglądarki internetowe. Wiadomo, przeglądarek się nie blokuje. Wtedy można zablokować poszczególne adresy IP.

Deny from "Adres IPv4"
Deny from "Adres IPv6"

Pobierz zestaw blokujący 1801 złych botów

Przygotowałem pliki konfiguracyjne .htaccess, które już zawierają gotową listę 1801 blokowanych złych botów. Korzystając z plików należy sprawdzić czy nie wykluczymy dla siebie istotnego ruchu bądź narzędzia. Na przykład narzędzie CRON uruchamiane z serwera, które pozwala działać programowi monitorującemu pozycje też ma własne pole User-Agent. Trzeba sprawdzić jakie i upewnić się, że nie ma go na liście.

Pliki są zarówno w wersji dla większości hostingów które obsługuję moduł setenvif oraz w wersji dla hostingu na home.pl

Pobierz

Plik ZIP, 26kB, 1801 blokowanych botów

The following two tabs change content below.

Artur Strzelecki

Niezależny specjalista SEM, który upowszechnia wiedzę o marketingu w wyszukiwarkach internetowych. W wolnych chwilach doradza dużym i małym klientom.

11 przemyśleń nt. „Jak zablokować „złe” boty – poradnik .htaccess + lista 1801 botów

  1. Super lista, czy wgranie jej w root też pomoże, czy trzeba w każdą domenę pakować?

  2. Dla każdej domeny jest osobny plik konfiguracyjny. Chociaż zawsze możesz spróbować czy twój hosting taki wariant przyjmie, z jednym plikiem.

  3. Oooo, świetne zestawienie Artur, tym bardziej pomocne, że – jak sam wiesz – męczę się ostatnio z przygotowaniem dobrego pliku .htaccess, który wytnie większość botów, więc … Dzięki serdeczne!

  4. Co to za podejrzane… „zaplecza?” które nie chcą lepszego zaindeksowania… i widoczności 😀

  5. Witam.

    Któryś raz nie udało mi się pobrać listy pomimo podania maila etc. Można prosić o podesłanie na skrzynkę?

    Jeszcze jedno, czy taki zapis jest poprawny dla Home.pl?
    Czy może
    RewriteCond %{HTTP_REFERER} ^-?$ [NC]
    RewriteCond %{HTTP_USER_AGENT} ^-?$ [NC]
    trzeba dać od osobnego bloku – wiem podstawy. 🙁

    RewriteEngine On
    rewritecond %{http_host} ^www.xxx.pl [nc]
    rewriterule ^(.*)$ http://xxx.pl/$1 [r=301,nc]

    RewriteCond %{HTTP_USER_AGENT} .*AhrefsBot* [NC,OR]
    RewriteCond %{HTTP_USER_AGENT} .*RogerBot* [NC]
    RewriteCond %{HTTP_USER_AGENT} .*MJ12Bot* [NC]
    RewriteCond %{HTTP_USER_AGENT} .*SPbot* [NC]
    RewriteCond %{HTTP_REFERER} ^-?$ [NC]
    RewriteCond %{HTTP_USER_AGENT} ^-?$ [NC]
    RewriteRule ^.* – [F,L]

    RewriteBase /

  6. Witam.

    Chciałem zapytać czy żeby zablokować dostęp dla agentów bez nazwy i referencji, o czym wspomniano wyżej w artykule (serwer home.pl bez modułu setenvif – ale ponoć htaccess i tak działa i blokuje boty jak należy według konsultanta home.pl ) można to zapisać jak poniżej? Czy jest to poprawnie zapisany kod?

    RewriteEngine On
    rewritecond %{http_host} ^www.xxx.pl [nc]
    rewriterule ^(.*)$ http:/ /xxx.pl/$1 [r=301,nc]

    RewriteCond %{HTTP_USER_AGENT} .*360Spider* [NC,OR]
    RewriteCond %{HTTP_USER_AGENT} .*80legs* [NC]
    RewriteCond %{HTTP_REFERER} ^-?$ [NC]
    RewriteCond %{HTTP_USER_AGENT} ^-?$ [NC]
    RewriteRule ^.* – [F,L]

    RewriteBase /

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *