Jak skutecznie zabezpieczyć stronę przed botami i scraperami – poradnik

Jak skutecznie zabezpieczyć stronę przed botami i scraperami – poradnik
  1. Identyfikacja botów
  2. Metody blokowania
  3. Implementacja zabezpieczeń
  4. Monitorowanie i wykrywanie botów
  5. Najlepsze praktyki

W dzisiejszych czasach ochrona zawartości strony internetowej przed automatycznym zbieraniem danych staje się coraz większym wyzwaniem. Boty i scrapery mogą generować niepotrzebne obciążenie serwera, kraść treści lub zbierać dane użytkowników. W tym artykule przedstawimy kompleksowe rozwiązania pozwalające zabezpieczyć stronę przed niepożądanym dostępem.

Identyfikacja botów

Popularne boty do blokowania:

  1. Boty AI i ChatBoty:
    • GPTBot (OpenAI)
    • ChatGPT-User
    • anthropic-ai (Claude)
    • Claude-Web
    • CCBot
    • Google-Extended
    • Cohere-ai
    • PerplexityBot
  2. Scrapery ogólnego przeznaczenia:
    • Scrapy
    • PetalBot
    • AhrefsBot
    • MJ12bot
    • SemrushBot
    • Rogerbot
    • Dotbot
    • BacklinkCrawler
  3. Boty mediów społecznościowych:
    • FacebookBot
    • TwitterBot
    • LinkedInBot
    • PinterestBot
    • InstagramBot
  4. Boty analityczne i SEO:
    • Screaming Frog SEO Spider
    • Majestic-12
    • BLEXBot
    • SEOkicks
    • SEOstats

Metody blokowania

1. Konfiguracja robots.txt

User-agent: GPTBot
Disallow: /
User-agent: ChatGPT-User
Disallow: /
User-agent: anthropic-ai
Disallow: /
User-agent: Claude-Web
Disallow: /
User-agent: CCBot
Disallow: /
User-agent: Google-Extended
Disallow: /
User-agent: Cohere-ai
Disallow: /
User-agent: PerplexityBot
Disallow: /
User-agent: Scrapy
Disallow: /
User-agent: PetalBot
Disallow: /
User-agent: AhrefsBot
Disallow: /
User-agent: MJ12bot
Disallow: /
User-agent: SemrushBot
Disallow: /
User-agent: Rogerbot
Disallow: /
User-agent: FacebookBot
Disallow: /
User-agent: TwitterBot
Disallow: /
User-agent: LinkedInBot
Disallow: /
User-agent: PinterestBot
Disallow: /

2. Konfiguracja .htaccess (Apache)

RewriteEngine On
# Blokada na podstawie User-Agent
RewriteCond %{HTTP_USER_AGENT} GPTBot|ChatGPT-User|anthropic-ai|Claude-Web|CCBot|Google-Extended|Cohere-ai|PerplexityBot|Scrapy|PetalBot|AhrefsBot|MJ12bot|SemrushBot|Rogerbot|FacebookBot|TwitterBot|LinkedInBot|PinterestBot [NC]
RewriteRule .* - [F,L]

# Blokada żądań bez User-Agent
RewriteCond %{HTTP_USER_AGENT} ^-?$
RewriteRule ^ - [F,L]

# Limit szybkości żądań
LimitRequestBody 10485760

3. Konfiguracja nginx

# Blokada botów w konfiguracji nginx
map $http_user_agent $is_bot {
    default 0;
    ~*(GPTBot|ChatGPT-User|anthropic-ai|Claude-Web|CCBot|Google-Extended|Cohere-ai|PerplexityBot|Scrapy|PetalBot|AhrefsBot|MJ12bot|SemrushBot|Rogerbot|FacebookBot|TwitterBot|LinkedInBot|PinterestBot) 1;
}

server {
    if ($is_bot) {
        return 403;
    }
    
    # Rate limiting
    limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;
    limit_req zone=one burst=10 nodelay;
}

4. Implementacja w PHP

<?php
class BotBlocker {
    private $blocked_bots = array(
        'GPTBot', 'ChatGPT-User', 'anthropic-ai', 'Claude-Web', 'CCBot',
        'Google-Extended', 'Cohere-ai', 'PerplexityBot', 'Scrapy', 'PetalBot',
        'AhrefsBot', 'MJ12bot', 'SemrushBot', 'Rogerbot', 'FacebookBot',
        'TwitterBot', 'LinkedInBot', 'PinterestBot'
    );
    
    private $suspicious_behaviors = array(
        'excessive_requests' => 100, // Max requests per minute
        'missing_headers' => array('accept', 'accept-language'),
        'request_timeout' => 0.5 // Minimum time between requests in seconds
    );
    
    public function checkAccess() {
        if ($this->isBot() || $this->showsSuspiciousBehavior()) {
            $this->blockAccess();
        }
    }
    
    private function isBot() {
        $user_agent = $_SERVER['HTTP_USER_AGENT'] ?? '';
        foreach ($this->blocked_bots as $bot) {
            if (stripos($user_agent, $bot) !== false) {
                return true;
            }
        }
        return false;
    }
    
    private function showsSuspiciousBehavior() {
        // Sprawdzanie częstotliwości żądań
        if ($this->checkRequestRate()) {
            return true;
        }
        
        // Sprawdzanie brakujących nagłówków
        foreach ($this->suspicious_behaviors['missing_headers'] as $header) {
            if (!isset($_SERVER['HTTP_' . strtoupper(str_replace('-', '_', $header))])) {
                return true;
            }
        }
        
        return false;
    }
    
    private function blockAccess() {
        header('HTTP/1.0 403 Forbidden');
        die('Access Denied');
    }
}

// Użycie
$botBlocker = new BotBlocker();
$botBlocker->checkAccess();
?>

5. Zabezpieczenia JavaScript i HTML

<!-- Meta tagi -->
<meta name="robots" content="noai">
<meta name="robots" content="noimageai">
<meta name="robots" content="noimagebot">
<meta name="robots" content="noarchive">

<!-- Skrypt anty-scraping -->
<script>
(function() {
    // Blokada devtools
    document.addEventListener('contextmenu', event => event.preventDefault());
    document.addEventListener('keydown', event => {
        if (event.ctrlKey && (event.keyCode === 85 || event.keyCode === 83)) {
            event.preventDefault();
        }
    });
    
    // Blokada kopiowania
    document.addEventListener('copy', function(e) {
        e.preventDefault();
        return false;
    });
    
    // Wykrywanie automatyzacji
    let automationDetected = false;
    
    const checkAutomation = () => {
        if (window.navigator.webdriver || 
            window._phantom || 
            window.__nightmare || 
            window.callPhantom || 
            window.buffer || 
            window.emit || 
            window.spawn) {
            automationDetected = true;
        }
    };
    
    checkAutomation();
    
    if (automationDetected) {
        document.body.innerHTML = 'Automated access detected';
    }
})();
</script>

Monitorowanie i wykrywanie botów

1. Implementacja systemu monitorowania

<?php
class BotMonitor {
    private $log_file = 'bot_activity.log';
    private $db_connection; // Połączenie z bazą danych
    
    public function logActivity($ip, $user_agent, $request_url) {
        $timestamp = date('Y-m-d H:i:s');
        $log_entry = sprintf(
            "%s | IP: %s | UA: %s | URL: %s\n",
            $timestamp,
            $ip,
            $user_agent,
            $request_url
        );
        
        file_put_contents($this->log_file, $log_entry, FILE_APPEND);
        $this->saveToDatabase($ip, $user_agent, $request_url);
    }
    
    private function saveToDatabase($ip, $user_agent, $request_url) {
        // Implementacja zapisu do bazy danych
    }
    
    public function analyzePatterns() {
        // Implementacja analizy wzorców ruchu
    }
}

Najlepsze praktyki

  1. Warstwowa ochrona
    • Stosuj różne metody zabezpieczeń jednocześnie
    • Regularnie aktualizuj listy blokowanych botów
    • Monitoruj skuteczność zabezpieczeń
  2. Optymalizacja wydajności
    • Zrównoważ poziom zabezpieczeń z wydajnością strony
    • Używaj cache’owania dla legitymowanych użytkowników
    • Implementuj rate limiting
  3. Zgodność z prawem
    • Upewnij się, że blokowanie nie narusza praw dostępu dla legitymowanych botów
    • Zachowaj zgodność z RODO i innymi regulacjami
    • Informuj użytkowników o stosowanych zabezpieczeniach
  4. Regularne aktualizacje
    • Monitoruj nowe typy botów
    • Aktualizuj reguły blokowania
    • Testuj skuteczność zabezpieczeń

Skuteczna ochrona przed botami wymaga odpowiedniego podejścia i regularnej aktualizacji zabezpieczeń. Przedstawione metody pozwalają znacząco ograniczyć niepożądany ruch na stronie, ale pamiętaj, że jest to proces ciągły, wymagający monitorowania i dostosowywania do nowych zagrożeń.

Pamiętaj, że niektóre boty (np. Google Bot) są potrzebne dla prawidłowego funkcjonowania SEO – blokuj tylko te, które rzeczywiście stanowią zagrożenie dla Twojej strony.

Comments

No comments yet. Why don’t you start the discussion?

    Dodaj komentarz

    Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *