Boty, crawlery i inne zło nie dające spać adminom.

3

Może komuś się przyda...

Ostatnio dość mocno i dotkliwie uaktywniły się różnego rodzaju boty, crawlery, spidery i inne dziadostwo intensywnie czytające i oglądające zdjęcia na stronach WWW, niestety jako efekt uboczny nabijające spory ruch na serwerach a nie przynoszący żadnych korzyści. Jeszcze tydzień temu boty generowały mi 80% ruchu. Polubowne działania z robots.txt jednak nie przyniosły widocznego efektu więc postanowiłem rozprawić się z nimi jak dawniej czyli powycinać "zło" po UserAgent.

Proste statystyki z ostatnich 7 dni (na 7 087 450 wejść boty to wciąż 3 129 166): BOTY-od-22-06-do-28-06-analiza.zip

Moja aktualna lista botów blokowanych na podstawie występująych substring'ów w UserAgent:

    'yandex','ahrefsbot', 'baiduspider', 'exabot', 'gigabot',
    'phpcrawl', 'httpunit', 'libwww', 'python-urllib', 'commons-httpclient', 'psbot',
    'naverbot', 'yeti', 'semrushbot', 'nekstbot', 'spbot',
    'screaming frog', 'seoscanners', 'scanner', 'spider',
    'uptimerobot', 'seznambot', 'ru_bot', 'mojeekbot',
    'mj12bot', 'majestic12', 'haosouspider', '360spider',
    'webmeup-crawler', 'blexbot', 'siteexplorer', 'ltx71', 'petalbot', 'seekport',
    'gptbot','babbar','crawler','bytespider','FriendlyCrawler','serpstatbot','semrush',
    'dataforseo.com','anthropic','ClaudeBot','nekst.pl','opensiteexplorer.org',
    'Python/','ows.eu/owler','AwarioBot','UptimeRobot','qwant.com/bot','ZoominfoBot',
    'GeedoProductSearch','Sogou web spider','Timpibot','crawler_eb_germany_2.0',
    'IonCrawl','commoncrawl.org','Dataprovider.com','censys.io'

1

Czemu dziadostwo, niektórzy z tego żyją, np. ja.

0
marian pazdzioch napisał(a):

Czemu dziadostwo, niektórzy z tego żyją, np. ja.

Jaki masz User Agent?

Większość tych botów jest skrajnie bezmyślna leci URL po URL zupełnie nie zwracając uwagi na znaczniki meta, cannonical itp...
U mnie generują setki tysięcy prawie milion wejść na dobę... obsługa tego kosztuje i to nie mało a serwery nie są z gumy.

2

No ja to wiem, ale może oni nie wiedzą albo mają to w pompie. A to nie wiesz że internet jest zepsuty?

https://www.google.com/search?q=the+internet+is+broken

0

Widzisz jakbyś udostępniał api to nie potrzeba by było pisać bota targającego cala treść 😅

1

Ja ze swoim (roboczym) crawlerkiem siedzę za proxy i dopisałem sprytne random user agent middleware, także scrapuję spokojnie:)

0
lion137 napisał(a):

Ja ze swoim (roboczym) crawlerkiem siedzę za proxy i dopisałem sprytne random user agent middleware, także scrapuję spokojnie:)

Zatem załapiesz się na blokady po IP :-)

0
lion137 napisał(a):

Ja ze swoim (roboczym) crawlerkiem siedzę za proxy i dopisałem sprytne random user agent middleware, także scrapuję spokojnie:)

Lepiej użyć user agenta googla i każdy będzie się bał je zbanować.

0
obscurity napisał(a):

Lepiej użyć user agenta googla i każdy będzie się bał je zbanować.

Nic Ci to nie da bo google informuje z jakich adresów działają jego boty:
https://developers.google.com/search/apis/ipranges/googlebot.json
https://developers.google.com/search/docs/crawling-indexing/verifying-googlebot

banalnie łatwo wyłapać oszusta.

1

To ja zdrugiej strony z ciekawości zapytam kolegów którzy z tych botów korzystają i przeszukują treści - napiszcie jakie ciekawe projekty macie, do czego te dane potem lecą u Was. Trading? Uczenie AI?

1

@obscurity
niby tak ale kiedy ostatnio sprawdzałeś IPki botów czy się zgadzają z tym za kogo się podają? Nikt raczej tego nie będzie sprawdzał dopóki bot naprawdę nie zrobi się uporczywy — obscurity

Zawsze sprawdzam.

Ogólnie algorytm filtrowania mam następujący:

BIAŁA LISTA IP

Mam WhiteList adresów IP którą zasilam:

  1. https://www.bing.com/toolbox/bingbot.json
  2. https://developers.google.com/search/apis/ipranges/googlebot.json
  3. Plus kilka adresów ręcznie uzupełnianych

inni mnie i tak nie interesują...

CZARNA LISTA IP

Do tego z automatu wywalam cały ruch z czarnej t.j.

  1. https://sblam.com/blacklist.txt
  2. Plusk klika adresów dodanych ręcznie

FILTR USER AGENT

Na koniec weryfikacja UserAgent z tytułowego posta, czyli wywalam wszystko co ma w UserAgent podstring:

    'yandex','ahrefsbot', 'baiduspider', 'exabot', 'gigabot',
    'phpcrawl', 'httpunit', 'libwww', 'python-urllib', 'commons-httpclient', 'psbot',
    'naverbot', 'yeti', 'semrushbot', 'nekstbot', 'spbot',
    'screaming frog', 'seoscanners', 'scanner', 'spider',
    'uptimerobot', 'seznambot', 'ru_bot', 'mojeekbot',
    'mj12bot', 'majestic12', 'haosouspider', '360spider',
    'webmeup-crawler', 'blexbot', 'siteexplorer', 'ltx71', 'petalbot', 'seekport',
    'gptbot','babbar','crawler','bytespider','FriendlyCrawler','serpstatbot','semrush',
    'dataforseo.com','anthropic','ClaudeBot','nekst.pl','opensiteexplorer.org',
    'Python/','ows.eu/owler','AwarioBot','UptimeRobot','qwant.com/bot','ZoominfoBot',
    'GeedoProductSearch','Sogou web spider','Timpibot','crawler_eb_germany_2.0',
    'IonCrawl','commoncrawl.org','Dataprovider.com','censys.io'

LICZNIK ODWOLAN Z IP / TYMCZASOWA CZRNA LISTA

Zliczam wywołanie z każdego IP ro rejestru "odwiedzin" t.j.

  +-----------+-----------+----------+
  | IP        | md        |  count   |
  +-----------+-----------+----------+
  |  1.2.3.4  | 0608      |      189 |
  |  1.2.8.4  | 0608      |     2389 |
  +-----------+-----------+----------+ 

I jeśli któryś IP w danym lub poprzednim dniu osiąga więcej niż limit to także jest blokowany.

i tyle...

Bez powyższych filtrów ruch na serwerach magicznie robi się nawet 10 razy większy.
Nie mamy też w serwisach takich danych, które ktoś bardzo chciałby crawlować więc nie muszę walczyć z metodami podstępnymi.

PaulGilbert napisał(a):

To ja zdrugiej strony z ciekawości zapytam kolegów którzy z tych botów korzystają i przeszukują treści - napiszcie jakie ciekawe projekty macie, do czego te dane potem lecą u Was. Trading? Uczenie AI?

Z jednej strony się bronię z drugiej też "okradam innych" ale nie sądzę, że ktoś się przyzna co crawluje :-)

0

Ja nie pytam o szczegóły, bardziej ciekawi mnie ogólnie co teraz na topie, jakie branże. W sejmie też zmiana prawa autorskiego, ciekaw jestem czy wpłynie to też na wasze projekty... (chociaż z drugiej strony i tak im pewnie póki co prezydent uwali co tam uchwalą...).

1

Dobra, czas na utrzymanie i pitolenie o tym blokowaniu botów naprawdę przewyższa ci koszt jaki generują? Weź z ciekawości podaj koszt jaki generują te boty.

Bo wiesz, to zabawa w kotka i myszke, nie da się jej wygrać.

Co się skrapuje: allegro, OLX I inne markety (serwisy typu https://tradewatch.pl, chyba że nie to mnie oświećcie), wszelkie inne markety (np. dane o liczbie ściągnięć jakiej apki z jakiegoś marketu). Generalnie wszystko co da się przerobić na pieniądz.

Inny przykład to księgi wieczyste które potem można sprzedać połączywszy z działką
https://geoportal360.pl/

dziadostwo intensywnie czytające i oglądające zdjęcia na stronach WWW

a to to akurat mogą być efekty uczenia AI do generowania jeszcze lepszych AI-flavour obrazków.

Bo nie wiem czy wiesz ten element układanki został oddelegowany do z prostu niewinnych non-profit organizations które potem jakoś tak oddają swoje dane do tych co mają pieniądze, np.:

https://en.wikipedia.org/wiki/Common_Crawl

3
marian pazdzioch napisał(a):

Dobra, czas na utrzymanie i pitolenie o tym blokowaniu botów naprawdę przewyższa ci koszt jaki generują? Weź z ciekawości podaj koszt jaki generują te boty.

"Pi * drzwi" - obsługa każdego 1 000 000 wejść na dobę to miesięczny koszt rzędu 1000 zł - 2000 zł .
W tym są głównie koszty serwerów ale także dostępów do zewnętrznych API jak np. mapy, dostęp do danych od partnerów czy GPTChat.

W sumie kalkulacja jest prosta.

1 rdzeń CPU na jednym serwerze może obsłużyć maksymalnie do około 5 zapytań na sekundę ponieważ 50ms - 400ms to średni czas na pozyskanie opracowanie i przygotowanie strony dla klienta. Czyli żeby obsłużyć 1 000 000 wejść na dobę muszę przeznaczyć na to minimum dwa rdzenie.

1 000 000 / 24 godz. / 60 min. / 60 sek. = 11.5

Do tego jak pisałem dochodzą koszty API, transferów, jeden serwer ma ograniczenia przepustowości więc potrzeba kolejne itp.. itd.
Oczywiście statystycznie ruch ludzi generuje mniejsze obciążenia bo dużo leci z cache.
Roboty niestety lecą po wszystkim dodatkowo zapychając dyski bo tworzą się niepotrzebne cache.

Trzeba jeszcze brać pod uwagę, że ruch nie rozkład się całą dobę po równo a są godziny "szczytu" kiedy zapotrzebiwanie na zasoby jest kilka razy wyższe niż np. nocą.

Tak to wygląda w praktyce (średnia ilość wywołań / minutę):

screenshot-20240629154106.png

Na wykresie widać, że ruch wczorajszej nocy był wyższy niż dzisiejszej. Właśnie dzięki temu, ze zaktualizowałem filtrowanie botów, o których mowa w temacie.

Posdumowaując....

@marian pazdzioch może ktoś uważa, że takie działąnia nie mają sensu ale w moim przypadku "walka" z botami przynosi wymierne korzyści finansowe.

0
4w0rX4t4X napisał(a):

Moja aktualna lista botów blokowanych na podstawie występująych substring'ów w UserAgent:

    'yandex','ahrefsbot', 'baiduspider', 'exabot', 'gigabot',
    'phpcrawl', 'httpunit', 'libwww', 'python-urllib', 'commons-httpclient', 'psbot',
    'naverbot', 'yeti', 'semrushbot', 'nekstbot', 'spbot',
    'screaming frog', 'seoscanners', 'scanner', 'spider',
    'uptimerobot', 'seznambot', 'ru_bot', 'mojeekbot',
    'mj12bot', 'majestic12', 'haosouspider', '360spider',
    'webmeup-crawler', 'blexbot', 'siteexplorer', 'ltx71', 'petalbot', 'seekport',
    'gptbot','babbar','crawler','bytespider','FriendlyCrawler','serpstatbot','semrush',
    'dataforseo.com','anthropic','ClaudeBot','nekst.pl','opensiteexplorer.org',
    'Python/','ows.eu/owler','AwarioBot','UptimeRobot','qwant.com/bot','ZoominfoBot',
    'GeedoProductSearch','Sogou web spider','Timpibot','crawler_eb_germany_2.0',
    'IonCrawl','commoncrawl.org','Dataprovider.com','censys.io'

ahrefsbot, axbot, gigabot...
Dlaczego oni sami się przyznają, że są botami? Może wystarczy zrobić coś w stylu /bot$/?
Z drugiej strony samo bycie botem nie musi być złe. Np. boty wyszukiwarek.

0
LukeJL napisał(a):

ahrefsbot, axbot, gigabot...
Dlaczego oni sami się przyznają, że są botami? Może wystarczy zrobić coś w stylu /bot$/?

Niektórzy chcą aby ich strona była skanowana bo korzystają z różnych narzędzi np. SEO.
Samo słowo bot to trochę mało. Zobacz sobie jak bardzo zróżnicowane są UserAgent na różnych telefonach i urządzeniach.

Z drugiej strony samo bycie botem nie musi być złe. Np. boty wyszukiwarek.

Dlatego tych "dobrych" się nie blokuje ale mnie interesują tylko Google i Bing.

1

@4w0rX4t4X nie wiem jakiego serwera WWW używasz. Natomiast z czystym sumieniem polecam mój sposób: NGINX + http_limit_req module (https://nginx.org/en/docs/http/ngx_http_limit_req_module.html).
Ja osobiście robię tak:

  1. Blacklist po IP lub UserAgent natarczywych/nieużytecznych botów. Listę adresów IP aktualizuję codziennie z abuseipdb.com + mam swoją, która tworzyła się przez ostatnie 10 lat. Ten ruch wycinam całkowicie.
  2. Limit liczby requestów przez ten moduł. Za klucz ustawiam adres IP i obliczam sensowny limit requestów dla pojedynczego IP. To taki limit dla ludzi tylko na text/html, dla assetów jest inny bo jedna strona zawiera wiele assetów.
  3. Ustawiam limit requestów po UserAgent dla znanych botów aby nie zajechały serwera. W końcu serwisy są dla ludzi 😉
0
4w0rX4t4X napisał(a):

Może komuś się przyda...

Zamiast walić jakimś .txt to zaproponował byś coś bardziej subtelnego.

Np. jakieś rozwiązanie oparte o blockchain wykorzystujące PoW (proof of work). Każde niezidentyfikowane IP musi dostarczyć token co do którego musiał spalić trochę planety. Dla mobilek/laptopów itp. drobnicy koszt pomijalny. Dla botów opartych o skalę zabójczy.

Coś jak z przedpłatą w NFZ. Wszyscy wiedzą że zadziała, nikt nie chce wprowadzić bo wybory.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.