Empêcher un robot de crawler votre site PHP

Robot web crawler facing access denied, blocked, and Error 403 messages
Écouter cet article

Voici plusieurs méthodes, de la plus simple à la plus complète :

1. Fichier robots.txt (à la racine du site)

User-agent: *
Disallow: /

⚠️ Limitation : c’est une simple demande. Les robots malveillants l’ignorent totalement.

2. Blocage via le User-Agent en PHP

$blocked_agents = ['bot', 'spider', 'crawl', 'scrapy', 'curl', 'python'];

$ua = $_SERVER['HTTP_USER_AGENT'] ?? '';

foreach ($blocked_agents as $agent) {
    if (stripos($ua, $agent) !== false) {
        http_response_code(403);
        exit('Accès interdit');
    }
}

3. Blocage via .htaccess ()

RewriteEngine On
RewriteCond %{HTTP_USER_AGENT} (bot|spider|crawl|scrapy) [NC]
RewriteRule ^ - [F,L]

4. Limitation du taux de requêtes (anti-flood)

session_start();

$limit = 30;          // max requêtes
$periode = 60;        // secondes

$now = time();
$_SESSION['hits'] = array_filter($_SESSION['hits'] ?? [], 
    fn($t) => $t > $now - $periode);

$_SESSION['hits'][] = $now;

if (count($_SESSION['hits']) > $limit) {
    http_response_code(429);
    exit('Trop de requêtes');
}

⚠️ Inefficace si le robot ne gère pas les cookies/sessions. Une vraie protection par rate-limiting se fait plutôt au niveau du serveur (Nginx limit_req, fail2ban, ou Cloudflare).

5. Piège à robots (honeypot)

Ajoutez un lien invisible dans vos pages ; les humains ne le voient pas, les robots le suivent :

<a href="/piege-robots.php" style="display:none;">ne pas cliquer</a>
// piege-robots.php
$ip = $_SERVER['REMOTE_ADDR'];
file_put_contents('/var/log/robots-bannis.txt', $ip . "\n", FILE_APPEND);
http_response_code(403);
exit;

Puis bannissez ces IPs via fail2ban ou un contrôle en haut de chaque page :

$bannis = file('/var/log/robots-bannis.txt', FILE_IGNORE_NEW_LINES);
if (in_array($_SERVER['REMOTE_ADDR'], $bannis)) {
    http_response_code(403);
    exit;
}

Recommandation

Pour une protection efficace, combinez les méthodes : robots.txt pour les robots légitimes + rate-limiting au niveau du serveur + honeypot + éventuellement un service comme Cloudflare pour bloquer les bots malveillants en amont.