- Identyfikacja botów
- Metody blokowania
- Implementacja zabezpieczeń
- Monitorowanie i wykrywanie botów
- 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:
- Boty AI i ChatBoty:
- GPTBot (OpenAI)
- ChatGPT-User
- anthropic-ai (Claude)
- Claude-Web
- CCBot
- Google-Extended
- Cohere-ai
- PerplexityBot
- Scrapery ogólnego przeznaczenia:
- Scrapy
- PetalBot
- AhrefsBot
- MJ12bot
- SemrushBot
- Rogerbot
- Dotbot
- BacklinkCrawler
- Boty mediów społecznościowych:
- FacebookBot
- TwitterBot
- LinkedInBot
- PinterestBot
- InstagramBot
- 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
- Warstwowa ochrona
- Stosuj różne metody zabezpieczeń jednocześnie
- Regularnie aktualizuj listy blokowanych botów
- Monitoruj skuteczność zabezpieczeń
- Optymalizacja wydajności
- Zrównoważ poziom zabezpieczeń z wydajnością strony
- Używaj cache’owania dla legitymowanych użytkowników
- Implementuj rate limiting
- 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
- 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.