Agresszív botok alapértelmezett tiltása Print

  • 0

Sok weboldalon a látogatói forgalom jelentős részét nem valódi emberek, hanem automatizált crawlerek (botok) adják: keresőmotorok indexelői, SEO-elemző eszközök, AI-modelleket tréningező adatgyűjtők és egyszerű scraperek. Ezek egy része agresszíven, rate limitelés nélkül, sokszor másodpercenként több kéréssel tölti le az oldal minden aloldalát, ami komoly szerverterhelést és lassulást okozhat a valódi látogatók számára.

Milyen botokat blokkol ez a szabály?

A listában szereplő user agentek nagyjából az alábbi kategóriákba sorolhatók:

  • SEO- és marketingelemző botok: BLEXBot, DotBot, MJ12bot, Ezooms, SentiBot, MetaURI, MegaIndex.ru, BarkRowler/Barkrowler, Nimbostratus-Bot, Polaris, AspiegelBot, serpstatbot, RSiteAuditor, seocompany.store, AhrefsSiteAudit, DomainStatsBot, SeekportBot, CriteoBot, BitSightBot, WellKnownBot, Cookiebot, trendictionbot, ZoominfoBot — jellemzően backlink-elemzést, versenytárs-figyelést vagy hirdetési célú adatgyűjtést végző, harmadik fél SaaS-szolgáltatásokhoz tartozó crawlerek. Nem hoznak valódi látogatói vagy keresőmotoros forgalmat, viszont rendszeresen és nagy mélységben járják be az oldalt.
  • AI-tréning és tartalomgyűjtő botok: meta-externalagent, meta-webindexer, ClaudeBot, Bytespider, GeedoBot, ImagesiftBot, OAI-SearchBot, CCBot — nagy nyelvi modellek betanításához vagy AI-alapú kereséshez gyűjtenek tartalmat a weboldalakról.
  • Keresőmotor-jellegű, de az adott oldal szempontjából nem releváns crawlerek: Baiduspider (kínai piacra), SeznamBot (cseh piacra), PetalBot, MojeekBot, OSZKBOT (az Országos Széchényi Könyvtár archiváló robotja), Nutch (nyílt forráskódú crawler-keretrendszer, amelyre sok egyéni bot épül) — ezek legitim keresőmotorokhoz vagy intézményekhez köthetők, de ha az adott célközönség nem ezekről a platformokról érkezik, a forgalmuk felesleges terhelést jelent.
  • Generikus HTTP-kliens könyvtárak: python-requests, Go-http-client, fasthttp, GRequests, GuzzleHttp — ezek nem konkrét botok, hanem programozási nyelvi könyvtárak alapértelmezett User-Agent stringjei. Mivel valódi böngésző szinte sosem küld ilyen fejlécet, a gyakorlatban szinte mindig scriptelt, azonosítatlan (esetleg rosszindulatú) lekérésekről árulkodnak.
  • Egyéb adatgyűjtő botok: DataForSeoBot — SEO-API szolgáltatáshoz tartozó crawler.

Miért történik a tiltás?

  • Terhelés csökkentése: sok felsorolt bot nem tartja be a robots.txt ajánlásait, és percenként több száz kérést is küldhet, ami CPU- és adatbázis-terhelést okoz.
  • Sávszélesség-megtakarítás: különösen képekkel, videókkal vagy nagy adatbázis-lekérdezésekkel dolgozó oldalaknál számottevő lehet a scraperek okozta forgalom.
  • Biztonság: az azonosítatlan HTTP-kliensek (python-requests, Go-http-client, GuzzleHttp stb.) mögött gyakran automatizált támadási kísérletek, sebezhetőség-keresés vagy tartalom-lopás áll.
  • Tartalomvédelem: az AI-tréning célú botok blokkolása megakadályozza, hogy az oldal tartalma engedély nélkül kerüljön be nagy nyelvi modellek tanítóadatai közé.

Hogyan lehet felülbírálni (kivételt tenni) a blokkoláson?

Előfordulhat, hogy egy blokkolt User-Agent stringet használó eszközt (pl. saját monitorozó szolgáltatást, terheléstesztet, egy webhookot vagy egy adott IP-címről érkező partnerintegrációt) mégis át kell engedni. Erre a legtisztább megoldás egy IP-cím alapú kivétellista, amit <RequireAny> blokkal lehet a szabályba építeni:

<IfModule mod_authz_core.c>
    <If "%{HTTP_USER_AGENT} =~ /(meta-externalagent|meta-webindexer|BLEXBot|DotBot|MJ12bot|Baiduspider|Ezooms|SentiBot|MetaURI|MegaIndex\.ru|BarkRowler|Nimbostratus-Bot|Polaris|AspiegelBot|serpstatbot\.com|PetalBot|RSiteAuditor|seocompany\.store|AhrefsSiteAudit|Nutch|OSZKBOT|SeznamBot|Barkrowler|CCBot|DataForSeoBot|ZoominfoBot|ClaudeBot|python-requests|Bytespider|GeedoBot|Go-http-client|SeekportBot|ImagesiftBot|DomainStatsBot|fasthttp|MojeekBot|CriteoBot|BitSightBot|OAI-SearchBot|GRequests|GuzzleHttp|WellKnownBot|Cookiebot|trendictionbot)/i">
        <RequireAny>
            # Alapból mindenkit elutasítunk, aki idáig eljutott
            Require all granted

            # --- Kivételek: ezek az IP-k/tartományok felülbírálják a tiltást ---
            Require ip 203.0.113.42
            Require ip 198.51.100.0/24
        </RequireAny>
    </If>
</IfModule>

A logika: a <RequireAny> blokkon belül elég, ha bármelyik Require sor teljesül ahhoz, hogy a kérés engedélyezve legyen. A Require all denied sor önmagában sosem "teljesül" (mindig elutasít), viszont ha a kliens IP-je szerepel a Require ip listában, az a feltétel igazzá válik, és felülírja az elutasítást. Így:

  • egy listázott IP-ről érkező kérés — akkor is, ha a User-Agentje egyezik a tiltólistával — átengedésre kerül;
  • minden más, tiltott User-Agenttel érkező kérés továbbra is 403-at kap.

A Require ip direktíva egyetlen IP-t (203.0.113.42) és CIDR-jelöléses tartományt (198.51.100.0/24) egyaránt elfogad, tetszőleges számú sorban felsorolva.

Alternatíva: engedélyezés titkos kérésfejléc alapján

Ha nem IP-cím, hanem például egy belső teszteszköz vagy CI-rendszer számára szeretnénk kivételt tenni, egy egyedi HTTP-fejléc is használható IP helyett vagy mellett:

<IfModule mod_authz_core.c>
    SetEnvIf X-Bot-Bypass "^titkos-token-ide$" bot_bypass

    <If "%{HTTP_USER_AGENT} =~ /(...)/i">
        <RequireAny>
            Require all denied
            Require env bot_bypass
        </RequireAny>
    </If>
</IfModule>

Ebben az esetben a kliensnek a kérésében el kell küldenie az X-Bot-Bypass: titkos-token-ide fejlécet ahhoz, hogy a tiltás ellenére átengedje a szabály. Fontos, hogy ez a "token" a .htaccess fájlban nyílt szövegként van jelen, ezért nem tekinthető valódi biztonsági intézkedésnek, csak gyakorlati kivétel-mechanizmusnak (pl. tesztelésre).

A szabály tesztelése

A módosítás után érdemes ellenőrizni, hogy a blokkolás és a kivétel is a várt módon működik:

# Ennek 403-at kell adnia
curl -A "BLEXBot/1.0" -I https://pelda-domain.hu/

# Ennek 200-at kell adnia (normál böngésző User-Agent)
curl -A "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" -I https://pelda-domain.hu/

# Ha van IP-alapú kivétel, a felülbírált IP-ről indított teszt is 200-at kell adjon
curl -A "BLEXBot/1.0" -I https://pelda-domain.hu/  # a szerverről, a whitelistelt IP-ről futtatva

Was this answer helpful?

« Back