Certains robots peuvent consommer énormément de ressources et ralentir un site internet.
Il n'existe pas de solution miracle universelle, mais on peut tout à fait limiter une bonne partie de ces bots en utilisant un simple fichier .htaccess.
Le principe est simple : utiliser le User-Agent et la directive SetEnvIfNoCase.
Filtrage par User-Agent
Liste de user-agent robots à intégrer dans le fichier .htaccess à la racine de votre site.
Comme on nous a rabâché de ranger notre chambre, la liste est classée par ordre alphabétique et n'est pas sensitive à la casse.
Une dernière variable d'environnement badbotOthers regroupe les lettres de V à Z.
À ajouter au début du fichier .htaccess.
# ============================================================================
# BLOCAGE DES ROBOTS PAR USER-AGENT
# ============================================================================
# Cette section d'en-tête de .htaccess bloque les robots indésirables (IA crawlers, scrapers, bots
# agressifs) en détectant leur User-Agent et en leur refusant l'accès.
#
# Fonctionnement en 2 étapes :
#
# 1) DÉTECTION : SetEnvIfNoCase analyse le User-Agent de chaque requête
# - Si le User-Agent contient l'un des patterns listés (ex: GPTBot, CCBot...)
# - Alors une variable d'environnement est créée (ex: badbotG, badbotC...)
# - NoCase = insensible à la casse (GPTBot = gptbot = GPTBOT)
# - Les bots sont regroupés alphabétiquement pour faciliter la maintenance
#
# 2) BLOCAGE : Deux syntaxes disponibles selon votre version Apache
# - Apache 2.2 : Order/Allow/Deny (syntaxe commentée ci-dessous)
# - Apache 2.4+ : <RequireAll> (syntaxe active par défaut)
#
# Note : cette méthode n'est pas infaillible car les bots peuvent mentir sur
# leur User-Agent, mais elle filtre efficacement les crawlers "honnêtes".
# ============================================================================
# Blocage par user agent de robots
SetEnvIfNoCase User-Agent (AlpostBot|AgentDataBot|AtlasBot|AIWebIndex|Applebot-Extended|AhrefsBot|AI2Bot|Ai2Bot-Dolma|Amazonbot|ANNUAIREFRANCAIS|anthropic-ai|Awario) badbotA
# blocage de bingbot temporaire pour cause de crawl agressif qui ne tient pas compte des directives de robots.txt
SetEnvIfNoCase User-Agent (BeansLLM|BingSapphire|bingbot|babbar|baidu|bytedance|Bytespider|BLEXBot|BrightBot|BitSightBot) badbotB
SetEnvIfNoCase User-Agent (CorpusBot|Cotoyigi|CompanySpotter|CCBot|ChatGPT-User|cohere-ai|cohere-training-data-crawler|commoncrawl|Crawlspace|CensysInspect) badbotC
SetEnvIfNoCase User-Agent (DmarcerSpotter|DataForSeoBot|Dataprovider|Diffbot|DomainStatsBot|DuckAssistBot|dataproviderbot|Dotbot|dotbot|DeepSeek) badbotD
SetEnvIfNoCase User-Agent (Elevenlabs|EduCrawler|expanseinc|EchoboxBot|ExaSearchBot) badbotE
SetEnvIfNoCase User-Agent (FirecrawlAgent|Factset_spyderbot|facebook|FacebookBot|facebot|FriendlyCrawler|Facebot) badbotF
SetEnvIfNoCase User-Agent (Google-CloudVertexBot|Google-Extended|GoogleOther|GoogleOther-Image|GoogleOther-Video|GPTBot|GumGum) badbotG
SetEnvIfNoCase User-Agent (HanaleiBot|headline|HaloBot) badbotH
SetEnvIfNoCase User-Agent (IbouBot|iaskspider|ICC-Crawler|IDBTE4M|ImagesiftBot|img2dataset|ISSCyberRiskCrawler) badbotI
SetEnvIfNoCase User-Agent (KeenableBot|Kangaroo|Kinza|kChatBot|KStandBot) badbotK
SetEnvIfNoCase User-Agent (LieBaoFast|lssbot|lssrocketcrawler|Linkup|Lohi) badbotL
SetEnvIfNoCase User-Agent (Mb2345Browser|megaindex|Meta-ExternalAgent|Meta-ExternalFetcher|MicroMessenger|MistralAI-User/1.0|mj12|mj12bot|MQQBrowser|MojeekBot) badbotM
SetEnvIfNoCase User-Agent (netEstate|Neevabot) badbotN
SetEnvIfNoCase User-Agent (openbasse|obsrvr|OAI-SearchBot|omgili|omgilibot|openai) badbotO
SetEnvIfNoCase User-Agent (piperic|Pandalytics|PeekixBot|Pinterestbot|paloaltonetworks|PanguBot|panscient|PerplexityBot|PetalBot|PREMSGO|python|ProximicCrawler) badbotP
SetEnvIfNoCase User-Agent (QlyzeBot|Qwantify) badbotQ
SetEnvIfNoCase User-Agent (Reflectionbot|RankPulseBot) badbotR
SetEnvIfNoCase User-Agent (ShapBot|SeotrendsBot|seokicks|ssi\.inc|srchs-research-bot|SEOJuice|seranking|sogou|SpeedCurve|Scrapy|seekport|Semrush|seostar|serpstatbot|seznam|Sidetrade|SiteLockSpider|spaziodati|SurdotlyBot) badbotS
SetEnvIfNoCase User-Agent (Timpibot|Twitterbot|TikTokSpider|turnitinbot) badbotT
SetEnvIfNoCase User-Agent (Upflow|UbiCrawler) badbotU
SetEnvIfNoCase User-Agent (veryhip|VendiBot|webatla|2ip|VelenPublicWebCrawler|xAI-SearchBot|Webzio-Extended|WebTrackrCrawler|wpbot|YouBot|yandex|YandexAdditional|YandexAdditionalBot|zgrab|zh_CN|zh-CN|zoominfo) badbotOthers
# Blocage UAs avec versions OS obsolètes (bots déguisés)
#iOS
SetEnvIfNoCase User-Agent "iPhone OS 9_" badbotOldUA
SetEnvIfNoCase User-Agent "iPhone OS 10_" badbotOldUA
SetEnvIfNoCase User-Agent "iPhone OS 11_" badbotOldUA
SetEnvIfNoCase User-Agent "iPhone OS 12_" badbotOldUA
SetEnvIfNoCase User-Agent "iPhone OS 13_" badbotOldUA
SetEnvIfNoCase User-Agent "iPhone OS 14_" badbotOldUA
SetEnvIfNoCase User-Agent "iPhone OS 15_" badbotOldUA
# à vérifier selon vos logs…
SetEnvIfNoCase User-Agent "iPhone OS 16_" badbotOldUA
#Android : Googlebot utilise Android 6
SetEnvIfNoCase User-Agent (Android\s4\.|Android\s5\.|Android\s7\.|Android\s8\.) badbotOldUA
# ============================================================================
# SYNTAXE APACHE 2.2 (décommenter si nécessaire, commenter RequireAll ci-dessous)
# ============================================================================
#Order Allow,Deny
#Allow from All
#Deny from env=badbotA
#Deny from env=badbotB
#Deny from env=badbotC
#Deny from env=badbotD
#Deny from env=badbotE
#Deny from env=badbotF
#Deny from env=badbotG
#Deny from env=badbotH
#Deny from env=badbotI
#Deny from env=badbotK
#Deny from env=badbotL
#Deny from env=badbotM
#Deny from env=badbotN
#Deny from env=badbotO
#Deny from env=badbotP
#Deny from env=badbotQ
#Deny from env=badbotR
#Deny from env=badbotS
#Deny from env=badbotT
#Deny from env=badbotU
#Deny from env=badbotOthers
#Deny from env=badbotOldUA
#
## Blocage IPs (syntaxe Apache 2.2)
#Deny from 117.148.130
#Deny from 111.224
#Deny from 111.225
#Deny from 58.218
#Deny from 59.63
#Deny from 61.160
#Deny from 123.125
#Deny from 220.181
#Deny from 5.188
#Deny from 5.255
#Deny from 46.229
#Deny from 91.241
#Deny from 14.231
#Deny from 123.30
#Deny from 195.74.76
#Deny from 78.108.43.208/29
#Deny from 192.42
## Tor exit nodes (optionnel)
## Deny from 185.220
# ============================================================================
# SYNTAXE APACHE 2.4+ (active par défaut)
# ============================================================================
<RequireAll>
Require all granted
# UA old bots
Require not env badbotOldUA
# Bots
Require not env badbotA
Require not env badbotB
Require not env badbotC
Require not env badbotD
Require not env badbotE
Require not env badbotF
Require not env badbotG
Require not env badbotH
Require not env badbotI
Require not env badbotK
Require not env badbotL
Require not env badbotM
Require not env badbotN
Require not env badbotO
Require not env badbotP
Require not env badbotQ
Require not env badbotR
Require not env badbotS
Require not env badbotT
Require not env badbotU
Require not env badbotOthers
# Blocage IPs
## Chine - ranges crawlers/attaques agressifs
Require not ip 117.148.130
Require not ip 111.224
Require not ip 111.225
Require not ip 58.218
Require not ip 59.63
Require not ip 61.160
Require not ip 123.125
Require not ip 220.181
## Russie - spam/scrapers
Require not ip 5.188
Require not ip 5.255
Require not ip 46.229
Require not ip 91.241
## Vietnam - scrapers agressifs
Require not ip 14.231
Require not ip 123.30
## AVAST crawler
Require not ip 195.74.76
## THINK-OPEN_ATH GR SYNAPSECOM
Require not ip 78.108.43.208/29
## Scrapers connus
Require not ip 192.42
# Plage ip fiberway.fr -> https://www.abuseipdb.com/check-block/185.177.72.0/25
Require not ip 185.177.72.0/25
## Tor exit nodes (optionnel, décommenter si souhaité)
# Require not ip 185.220
</RequireAll>
# Optionnel
ErrorDocument 403 "Access denied. Malicious bot or outdated OS/Browser."
# -------------------------------------------------------#
# Les autres règles après… #
# -------------------------------------------------------#
Détails des bots
Documentation de la liste SetEnvIfNoCase User-Agent en place, un bot par ligne.
Descriptions établies à partir de sources publiques (documentation officielle des opérateurs quand elle existe, sinon dépôts communautaires de recensement de crawlers).
Les entrées marquées "origine incertaine" n'ont pas de source fiable trouvée.
Note : cette liste n'est pas forcément à jour, seul le .htaccess est maintenu en permanence.
badbotA
| Bot | Description |
|---|---|
| AtlasBot | Bot de harmoniamix.com, ajouté en septembre 2026 après signalement à 100% de risque sur AbuseIPDB, aucune documentation légitime trouvée côté opérateur |
| AIWebIndex | Origine incertaine, probablement un indexeur générique lié à l'IA, pas de documentation officielle trouvée |
| Applebot-Extended | Extension d'Applebot utilisée par Apple pour entraîner Apple Intelligence, opt-out distinct du crawler de recherche Applebot classique |
| AhrefsBot | Crawler SEO d'Ahrefs, analyse de backlinks et audit de sites pour leur plateforme |
| AI2Bot | Crawler de l'Allen Institute for AI (AI2), collecte de données pour la recherche en IA |
| Amazonbot | Crawler d'Amazon, alimente notamment les réponses d'Alexa et d'autres services Amazon |
| ANNUAIREFRANCAIS | Origine incertaine, probablement lié à un annuaire web français, peu de documentation disponible |
| anthropic-ai | Crawler d'Anthropic pour la collecte de données d'entraînement, distinct de ClaudeBot |
| Awario | Scraper de données pour outil de veille et social listening, usage IA non clarifié par l'opérateur |
badbotB
| Bot | Description |
|---|---|
| BingSapphire | Variante interne des crawlers Microsoft/Bing, peu documentée publiquement |
| bingbot | Crawler d'indexation du moteur de recherche Bing (Microsoft) |
| babbar | Crawler de Babbar.tech, outil SEO français d'analyse de backlinks |
| baidu | Crawler du moteur de recherche chinois Baidu |
| bytedance | Crawler générique de ByteDance (maison mère de TikTok) |
| Bytespider | Crawler de ByteDance pour la collecte de données d'entraînement IA, connu pour ignorer largement robots.txt |
| BLEXBot | Crawler SEO de WebMeUp, analyse de liens et de contenu |
| BrightBot | Lié à Bright Data, infrastructure de proxys/scraping utilisée par des clients tiers à des fins variées, dont la collecte de données IA |
| BitSightBot | Crawler de BitSight, évaluation de posture de cybersécurité des entreprises |
badbotC
| Bot | Description |
|---|---|
| Cotoyigi (Cotoyogi) | Scraper classé "agressif", opérateur non identifié publiquement |
| CompanySpotter | Origine incertaine, probablement un outil de prospection/enrichissement de données d'entreprise |
| CCBot | Crawler de Common Crawl, alimente le jeu de données ouvert massivement réutilisé pour l'entraînement de modèles IA |
| ChatGPT-User | Agent de navigation d'OpenAI déclenché par un utilisateur de ChatGPT (plugins, navigation à la demande) |
| cohere-ai | Crawler de Cohere pour la collecte de données IA |
| cohere-training-data-crawler | Crawler explicitement dédié à l'entraînement chez Cohere |
| commoncrawl | Alias de l'infrastructure Common Crawl, même famille que CCBot |
| Crawlspace | Service de crawling à la demande, données revendues à des tiers dont des acteurs IA |
| CensysInspect | Outil de scan Internet de Censys, recherche en cybersécurité et cartographie d'actifs exposés, pas un scraper de contenu éditorial |
badbotD
| Bot | Description |
|---|---|
| DmarcerSpotter | Crawler de DMARCER (iVibe Media Limited), mesure la posture de sécurité email (DMARC/SPF/DKIM) des domaines. Aucun intérêt. |
| DataForSeoBot | Crawler de DataForSEO, fournisseur de données SEO |
| Dataprovider | Crawler de Dataprovider.com, données web et analytique |
| Diffbot | Entreprise de web scraping assisté par IA, construction de graphes de connaissances |
| DomainStatsBot | Origine incertaine, probablement analyse statistique de noms de domaine |
| DuckAssistBot | Crawler de DuckDuckGo pour la fonctionnalité d'assistant IA DuckAssist |
| dataproviderbot | Variante de nommage de Dataprovider |
| Dotbot | Crawler de Moz, collecte de données de liens pour leurs outils SEO |
| DeepSeek | Crawler de l'entreprise chinoise DeepSeek, collecte de données pour l'entraînement de leurs modèles |
badbotE
| Bot | Description |
|---|---|
| expanseinc | Expanse (racheté par Palo Alto Networks), scanner de surface d'attaque exposée |
| EchoboxBot | Crawler d'Echobox, outil de planification de publication sur réseaux sociaux, récupère un aperçu du contenu |
| ExaSearchBot | Crawler d'Exa, moteur de recherche/API sémantique, requêtes signées cryptographiquement (RFC 9421) |
badbotF
| Bot | Description |
|---|---|
| FirecrawlAgent | Firecrawl, service de scraping en tant qu'API, principalement destiné à alimenter des LLM |
| Factset_spyderbot | Crawler de FactSet, données financières |
| Crawler générique associé à Meta/Facebook | |
| FacebookBot | Crawler de Meta, usage IA non clairement documenté |
| facebot | Variante de nommage du crawler Facebook |
| FriendlyCrawler | Origine incertaine, nom générique sans documentation trouvée |
| Facebot | Crawler de Meta pour la génération d'aperçus de liens (OpenGraph) dans les apps Meta |
badbotG
| Bot | Description |
|---|---|
| Google-CloudVertexBot | Crawler de Google Cloud Vertex AI |
| Google-Extended | Contrôle d'opt-out spécifique de Google pour l'entraînement des modèles Gemini, distinct de Googlebot (indexation recherche classique) |
| GoogleOther | Crawler générique de Google pour des usages internes/produits hors recherche |
| GoogleOther-Image | Variante GoogleOther dédiée aux images |
| GoogleOther-Video | Variante GoogleOther dédiée à la vidéo |
| GPTBot | Crawler d'OpenAI pour la collecte de données d'entraînement de modèles |
| GumGum | Entreprise d'ad-tech et vision par ordinateur, crawl à des fins de ciblage publicitaire contextuel |
badbotH
| Bot | Description |
|---|---|
| headline | Origine incertaine, aucune documentation fiable trouvée |
| HaloBot | Origine incertaine, aucune documentation fiable trouvée |
badbotI
| Bot | Description |
|---|---|
| IbouBot | Origine incertaine, aucune documentation fiable trouvée |
| iaskspider | Crawler du moteur de recherche iAsk.ai |
| ICC-Crawler | Origine incertaine, non documenté par un opérateur identifiable |
| IDBTE4M | Signature ancienne et peu documentée, souvent associée à du trafic suspect/usurpé |
| ImagesiftBot | Crawler d'Imagesift, indexation d'images pour recherche visuelle assistée par IA |
| img2dataset | Outil open-source de téléchargement massif d'images, largement utilisé pour constituer des jeux de données d'entraînement IA |
| ISSCyberRiskCrawler | Crawler d'ISS (Institutional Shareholder Services), notation de risque cyber des entreprises |
badbotK
| Bot | Description |
|---|---|
| Kangaroo | Origine incertaine, aucune documentation fiable trouvée |
| Kinza | Associé au navigateur Kinza (projet japonais), usage crawler non clarifié |
| kChatBot | Origine incertaine, aucune documentation fiable trouvée |
| KStandBot | Origine incertaine, aucune documentation fiable trouvée |
badbotL
| Bot | Description |
|---|---|
| LieBaoFast | Associé au navigateur LieBao/Cheetah Mobile (Chine), historiquement signalé pour un comportement de fetch agressif |
| lssbot | Origine incertaine, aucune documentation fiable trouvée |
| lssrocketcrawler | Origine incertaine, aucune documentation fiable trouvée |
| Linkup | Entreprise de recherche/API IA, même famille d'usage qu'Exa |
| Lohi | Origine incertaine, aucune documentation fiable trouvée |
badbotM
| Bot | Description |
|---|---|
| Mb2345Browser | Navigateur mobile chinois 2345 Browser, souvent associé à un comportement de crawl indésirable |
| megaindex | Outil SEO russe MegaIndex, analyse de backlinks |
| Meta-ExternalAgent | Crawler de Meta pour la collecte de données destinées à l'entraînement IA |
| Meta-ExternalFetcher | Crawler de Meta pour la récupération de contenu référencé (aperçus, fonctionnalités liées) |
| MicroMessenger | Navigateur intégré de WeChat (Tencent), pas un crawler à proprement parler mais génère du trafic automatisé |
| MistralAI-User | Agent de navigation de Mistral pour Le Chat, déclenché à la demande d'un utilisateur |
| mj12 / mj12bot | Crawler de Majestic, analyse de backlinks pour leur outil SEO |
| MQQBrowser | Navigateur mobile QQ (Tencent, Chine) |
| MojeekBot | Crawler de Mojeek, moteur de recherche indépendant britannique |
badbotN
| Bot | Description |
|---|---|
| netEstate | netEstate GmbH, collecte de données de domaines à des fins d'étude de marché |
| Neevabot | Crawler de Neeva, moteur de recherche fermé depuis son rachat en 2023, probablement résiduel |
badbotO
| Bot | Description |
|---|---|
| obsrvr | Origine incertaine, aucune documentation fiable trouvée |
| OAI-SearchBot | Crawler d'OpenAI dédié à la fonctionnalité de recherche/citations de ChatGPT, distinct de GPTBot |
| omgili / omgilibot | Omgili, collecte de contenus de forums/blogs, données ensuite licenciées notamment pour l'entraînement IA |
| openai | Référence générique à OpenAI |
badbotP
| Bot | Description |
|---|---|
| Pinterestbot | Crawler de Pinterest, alimente les rich pins et l'indexation de contenu |
| paloaltonetworks | Bot de scan sécurité de Palo Alto Networks |
| PanguBot | Crawler de Huawei lié à leur modèle IA Pangu |
| panscient | Panscient, collecte de données d'entreprise |
| PerplexityBot | Crawler de Perplexity AI pour alimenter ses réponses avec citations |
| PetalBot | Crawler de Huawei pour leur moteur Petal Search |
| PREMSGO | Origine incertaine, aucune documentation fiable trouvée |
| python | User-agent par défaut des bibliothèques Python (requests, urllib), signale généralement un script non identifié plutôt qu'un acteur précis |
| ProximicCrawler | Proximic (Comscore), collecte de données d'audience pour l'ad-tech |
badbotQ
| Bot | Description |
|---|---|
| Qwantify | Crawler de Qwant, moteur de recherche français |
badbotR
| Bot | Description |
|---|---|
| RankPulseBot | Origine incertaine, probablement un outil de suivi de position SEO |
badbotS
| Bot | Description |
|---|---|
| SEOJuice | SaaS d'optimisation scrapper commercial, outil SEO |
| seranking | Crawler de SE Ranking, outil SEO |
| sogou | Crawler du moteur de recherche chinois Sogou (groupe Tencent) |
| Sidetrade%20indexer / Sidetrade | Sidetrade, entreprise française de données B2B et scoring crédit |
| SpeedCurve | Outil de monitoring de performance web, requêtes synthétiques automatisées plutôt que scraping de contenu |
| Scrapy | User-agent par défaut du framework Python Scrapy, signale un script de scraping non identifié |
| seekport | Crawler de Seekport, moteur de recherche allemand |
| Semrush / SemrushBot (BA/CT/OCOB/SI/SWA) | Famille de crawlers Semrush, chacun dédié à une fonction de leur suite SEO (audit de backlinks, contenu, on-page, etc.) |
| seostar | Outil SEO, crawler d'analyse |
| serpstatbot | Crawler de Serpstat, outil SEO |
| seznam | Crawler de Seznam.cz, moteur de recherche tchèque |
| SiteLockSpider | Crawler de SiteLock, service de scan de sécurité de sites |
| SM-A505FN | Référence de modèle Samsung Galaxy A50 apparaissant dans un user-agent, probablement un UA mobile usurpé plutôt qu'un vrai appareil |
| spaziodati | SpazioDati, entreprise italienne de données business/SEO |
| SurdotlyBot | Sur.ly, service de vérification de réputation de liens |
badbotT
| Bot | Description |
|---|---|
| Timpibot | Crawler de Timpi, moteur de recherche décentralisé |
| Twitterbot | Crawler de X/Twitter pour la génération de cartes d'aperçu de liens |
| TikTokSpider | Crawler lié à ByteDance/TikTok, même famille que Bytespider |
| turnitinbot | Crawler de Turnitin, détection de plagiat, compare le contenu web aux travaux soumis |
badbotU
| Bot | Description |
|---|---|
| Upflow | Origine incertaine, probablement lié à la plateforme de gestion de paiements B2B Upflow |
| UbiCrawler | Crawler académique ancien, historiquement utilisé pour des études de graphes du web |
badbotOthers
| Bot | Description |
|---|---|
| VendiBot | Origine incertaine, aucune documentation fiable trouvée |
| webatla | Variante ajoutée par toi en septembre 2026 |
| 2ip | 2ip.ru, service russe de géolocalisation IP |
| VelenPublicWebCrawler | Origine incertaine, aucune documentation fiable trouvée |
| xAI-SearchBot | Crawler de xAI (Grok), alimente les réponses avec recherche web |
| Webzio-Extended | Webz.io, collecte et licence de données web (y compris dark web) à des tiers, dont des acteurs IA |
| WebTrackrCrawler | Origine incertaine, aucune documentation fiable trouvée |
| wpbot | Nom générique associé à des bots liés à WordPress (plugin ou scan), origine précise non confirmée |
| YouBot | Crawler de You.com, alimente leur moteur de recherche |
| yandex / YandexAdditional / YandexAdditionalBot | Crawlers du moteur de recherche russe Yandex |
| zgrab | Scanner Internet open-source (ZGrab), utilisé par des outils de recherche en sécurité comme Censys |
| zh_CN / zh-CN | Fragments de locale chinoise apparaissant dans des user-agents, probablement des UA de navigateur malformés ou usurpés plutôt que des noms de bots à proprement parler |
| zoominfo | ZoomInfo, entreprise d'enrichissement de données B2B |
Notes
- Liste à jour au 29 octobre 2026.
- Les entrées "origine incertaine" méritent d'être revérifiées si l'une d'elles génère un volume de trafic notable dans tes logs, plutôt que de rester non documentées indéfiniment.
Filtrage par plage IP
En complément, certains robots n'ont pas de signature par User-Agent.
Il peut s'agir de robots ou d'hébergeurs plus ou moins honnêtes… Par exemple, des logiciels Avast ratissent copieusement les sources de sites. C'est ce qui est arrivé ici.
Après analyse des logs, on peut cibler également des plages IP que l'on considère malveillantes.
Une référence très utile est le site AbuseIPDB. Il permet de vérifier si une adresse est signalée comme malveillante, avec pas mal de détails.
C'est intégré dans le code ce-dessus.
Le petit plus…
Côté serveur, on peut aussi utiliser une règle qui va considérer qu'en dessous d'une certaine longueur de chaine USER_AGENT, on redirige ou bloque.
En PHP, ça donne quelque chose comme ça :
if (strlen($_SERVER['HTTP_USER_AGENT']) < 10) {
// faire quelque chose // exit(); ou pas.
}
Et encore plus….
Une liste collectée via les logs de ce site.
102.223.129.156
103.181.174.30
103.187.245.10
103.218.253.133
103.228.200.159
103.252.109.160
103.35.212.68
103.75.0.0/16
104.164.221.51
104.168.119.0/25
104.171.155.0/25
104.194.194.243
104.223.11.251
104.223.89.121
104.237.0.0/16
104.243.197.0/25
104.37.45.31
107.150.0.0/15
107.172.0.0/14
107.181.156.0/25
108.187.71.0/25
109.156.129.169
110.44.0.0/24
113.179.122.166
119.13.234.90
119.13.236.113
119.13.236.154
128.121.234.65
130.255.162.181
130.94.184.207
130.94.184.79
130.94.209.17
130.94.226.233
130.94.228.155
134.236.81.99
14.166.139.142
141.98.83.108
142.147.194.0/25
142.147.228.185
142.252.0.0/16
143.20.204.162
149.115.135.0/25
149.18.168.70
149.18.177.0/25
149.36.15.150
149.57.0.0/16
151.241.38.81
151.244.74.213
151.245.197.209
152.237.172.41
153.66.225.66
154.28.0.0/16
155.94.189.39
155.94.225.17
158.222.121.0/25
159.203.166.76
16.216.88.147
162.249.167.243
163.172.226.30
167.234.124.211
170.78.20.233
172.58.112.0/25
173.225.243.193
173.254.193.240
173.46.0.0/16
177.11.85.199
177.125.24.117
177.184.179.19
177.184.232.0/25
177.185.78.43
178.121.6.234
178.156.235.44
178.239.22.112
179.125.104.184
179.89.195.141
180.254.225.160
180.92.154.166
180.92.157.235
183.171.249.244
185.12.38.55
185.131.221.198
185.215.221.190
185.221.219.11
185.240.254.11
185.240.254.169
186.122.90.165
187.171.153.43
188.42.112.0/25
190.139.89.105
190.7.36.126
190.92.202.208
191.156.18.24
192.161.169.219
192.204.130.129
192.210.155.170
192.210.155.61
192.36.217.7
193.169.252.34
193.34.75.141
195.114.15.135
197.211.0.0/16
198.55.105.23
198.55.112.75
199.33.71.40
20.96.201.62
200.10.100.65
200.125.229.248
204.217.148.92
204.44.117.119
209.251.22.64
209.54.97.18
217.79.118.181
23.126.179.233
23.158.16.24
23.80.46.2
23.88.98.81
24.96.209.0/25
3.80.192.211
31.42.115.218
34.122.173.216
35.150.249.177
35.151.214.0/25
38.123.43.139
38.129.70.0/25
38.224.43.240
38.43.155.154
41.208.128.28
42.116.19.78
43.0.0.0/8
45.148.77.166
45.178.3.200
45.201.98.68
45.237.107.234
45.41.141.90
45.71.139.0
45.84.107.0/24
45.86.161.68
46.161.9.70
46.28.192.182
46.28.199.51
47.190.127.0/25
48.47.9.212
49.205.96.188
49.213.32.12
51.15.183.217
51.91.233.0/24
62.175.228.112
62.244.117.232
64.140.134.54
64.140.139.3
64.90.243.218
67.203.57.0/25
67.240.28.78
68.4.150.142
72.145.93.148
72.27.113.8
72.63.20.0/25
76.113.120.0/25
77.219.14.29
80.222.71.126
84.32.105.49
85.254.0.0/16
85.89.193.220
85.89.205.86
85.89.210.180
89.201.173.98
91.198.95.0/25
93.158.90.0/24
98.126.19.7
98.146.197.21
^122.51.64
^125.64.17
^132.232
^135.232
^139
^144.217.99
^147.135.137
^149.129.111
^156.59
^159.89.156
^160.224
^162.243.128
^176.119.28
^185.119.81
^185.222.57
^185.234.216
^197.245.231
^199.127
^20.188.41
^205.169.39
^207.99.15
^211.110
^213.159.213
^216.18.204
^216.228.117
^217.109.174.16
^220.243
^23.240
^24.225.203.
^39.101.150
^39.45
^41.219
^42.51.43
^44.200.107
^45.227.253
^46.11[89]
^47.106
^47.93
^5.188.84
^51.161.119
^51.79
^64.251.14
^65.154.226
^67.213.90
^77.111
^88.209.96
Avec cette liste, sur Kortic, on filtre avec une toute bête fonction.
$BANNED_DB étant un tableau qui contient la liste. Ne rêvez pas, ce ne sont pas les vraies variables… 😉
$byIp = false;
foreach ($BANNED_DB as $pattern) {
// Format CIDR (85.254.0.0/16)
if (str_contains($pattern, '/')) {
[$subnet, $mask] = explode('/', $pattern);
$ip = ip2long($_SERVER['REMOTE_ADDR']);
$subnet = ip2long($subnet);
$mask = -1 << (32 - (int)$mask);
if (($ip & $mask) === ($subnet & $mask)) {
$byIp = true;
break;
}
}
// Format regex (^10.10 ou IP complète)
elseif (preg_match('/' . $pattern . '/', $_SERVER['REMOTE_ADDR'])) {
$byIp = true;
break;
}
}
Notation CIDR
Le CIDR (Classless Inter-Domain Routing) est une notation adresse/préfixe où le chiffre après le slash indique combien de bits sont fixes dans l'adresse. Les bits restants (sur 32 au total) définissent la taille de la plage.
Plages courantes
| Notation | Adresses | Exemple | Usage typique |
|---|---|---|---|
/8 |
16 777 216 | 43.0.0.0/8 |
Bloc continental — ban de pays entier |
/16 |
65 536 | 85.254.0.0/16 |
Plage d'un hébergeur entier (x.x.*.*) |
/24 |
256 | 93.158.90.0/24 |
Bloc de base (x.x.x.*), le plus courant |
/25 |
128 | 142.147.194.0/25 |
Moitié d'un /24, découpage fréquent chez les hébergeurs |
/32 |
1 | 107.174.86.83/32 |
IP unique — équivalent d'une règle IP seule |
Règle à retenir
Plus le chiffre est petit, plus la plage est large. Chaque unité en moins double le nombre d'adresses couvertes :
/25 → 128 adresses
/24 → 256 adresses (× 2)
/23 → 512 adresses (× 2)
/22 → 1 024 adresses (× 2)
…
Un /22 couvre donc quatre /24, un /16 couvre 256 /24, etc.
Précision…
Tout ceci est à utiliser avec précaution afin de ne pas non plus bloquer son référencement !
Note à propos de Semrush et Ahrefs dans le même genre : ce ne sont pas des robots, mais des aspirateurs industriels.
Ils aspirent les données et n'ont aucune conscience de la taille du serveur qu'ils attaquent.
Leur logique est purement égoïste : ils veulent l'info la plus fraîche possible pour vendre leurs abonnements SEO à prix d'or.
Nos contenus ne sont juste que de la matière première.
Nous payons l'hébergement et la bande passante pour qu'eux puissent remplir leurs bases de données.
C'est le pire ratio coût/bénéfice pour un éditeur de site : ils coûtent du pognon en ressources et ils n'apportent aucun trafic, contrairement à Google, Bing, Ecosia et consorts plus sérieux.
Donc la règle SetEnvIfNoCase User-Agent (Semrush|SemrushBot|...) badbotS, ce n'est pas de la méchanceté, c'est de la légitime défense de serveur. Un bot qui crawl 10 pages à la seconde, c'est blocage sans sommation.
Nan mais oh !
Le complément
Mettre en place un piège de Honeypot via robots.txt et .htaccess. Très rigolo aussi !
Conclusion
Heu… ah non, pas de conclusion.
That's all, Folks.