Jak chronić stronę internetową przed botami? Skuteczne metody zabezpieczeń
Internet jest pełen botów – niektóre z nich są pożyteczne (np. boty wyszukiwarek), ale wiele działa na szkodę właścicieli stron internetowych. Złośliwe boty mogą generować sztuczny ruch, zbierać dane (scraping), atakować formularze logowania, wysyłać spam, czy próbować wykrywać luki bezpieczeństwa. Dlatego ochrona strony WWW przed botami to dziś nie opcjonalna praktyka, a konieczność.
1. CAPTCHA i reCAPTCHA
CAPTCHA (Completely Automated Public Turing test to tell Computers and Humans Apart) to popularna metoda weryfikacji, czy użytkownik jest człowiekiem. Google reCAPTCHA (v2 i v3) to najczęściej stosowane rozwiązanie, oferujące różne poziomy trudności:
- reCAPTCHA v2: użytkownik klika checkbox „Nie jestem robotem” lub rozwiązuje obrazkową zagadkę.
- reCAPTCHA v3: działa w tle i ocenia użytkownika na podstawie jego zachowania (skala ryzyka 0.0–1.0).
Zalety: Skuteczna bariera dla prostych botów.
Wady: Może irytować użytkowników lub być obchodzona przez zaawansowane boty.
2. Filtrowanie ruchu po User-Agent i IP
Boty często ujawniają swój typ w nagłówku „User-Agent” lub pochodzą z podejrzanych adresów IP. Można zablokować znanych spamerów, crawlerów lub sieci TOR.
- Blacklisty IP i User-Agent
- Geo-blokowanie (np. jeśli boty pochodzą z określonych krajów)
Zalety: Prosta implementacja.
Wady: Łatwo obejść przez zmiany User-Agent lub VPN.
3. WAF (Web Application Firewall)
WAF to zapora aplikacyjna działająca na poziomie HTTP. Rozpoznaje nietypowe wzorce ruchu i ataki, np. SQL Injection, XSS, brute force.
Popularne usługi WAF:
- Cloudflare
- AWS WAF
- Sucuri
Zalety: Szeroka ochrona, aktualizacje sygnatur zagrożeń.
Wady: Koszt i konieczność konfiguracji.
4. Ograniczanie liczby zapytań (Rate Limiting / Throttling)
Można ograniczyć liczbę zapytań z jednego IP w określonym czasie. Skutecznie zapobiega to atakom DDoS i brute force.
Zalety: Prosta konfiguracja na poziomie serwera (nginx, Apache) lub aplikacji.
Wady: Może zablokować prawdziwych użytkowników przy intensywnym ruchu.
5. Ukrywanie formularzy przed botami (honeypot fields)
Dodaje się ukryte pola w formularzach. Użytkownicy ich nie widzą, ale boty je wypełniają – to wyraźny sygnał do odrzucenia formularza.
Zalety: Niewidoczne dla użytkownika, skuteczne na proste boty.
Wady: Nie działa na inteligentniejsze boty.
6. Analiza zachowania użytkownika
Boty zachowują się inaczej niż ludzie. Przykłady nietypowego zachowania:
- Zbyt szybkie uzupełnienie formularza
- Brak ruchu myszy
- Nieprzewidywalne lub nadmierne odświeżanie
Można zastosować skrypty JavaScript analizujące interakcję i blokujące podejrzanych użytkowników.
7. Tokeny CSRF i sesje tymczasowe
Zapobieganie automatycznemu przesyłaniu formularzy przez boty poprzez dodawanie tokenów CSRF (Cross-Site Request Forgery) do formularzy i weryfikowanie ich po stronie serwera.
Zalety: Chroni przed zautomatyzowanymi atakami formularzy.
Wady: Wymaga dodatkowej logiki po stronie serwera.
8. Sprawdzanie DNS i reputacji IP
Można używać zewnętrznych usług do sprawdzania reputacji odwiedzających adresów IP, np.:
- Project Honey Pot
- AbuseIPDB
Przykłady zabezpieczeń
1. Honeypot – ukryte pole formularza
Dodaj w formularzu ukryte pole, którego prawdziwy użytkownik nie wypełni:
HTML:
<form method="POST" action="handler.php">
<input type="text" name="email" placeholder="Twój e-mail" required>
<input type="text" name="website" style="display:none;"> <!-- honeypot -->
<input type="submit" value="Wyślij">
</form>
PHP (handler.php):
if (!empty($_POST['website'])) {
die("Zablokowano – wykryto bota.");
}
// Dalej przetwarzaj formularz
2. CSRF Token – ochrona formularzy
Formularz (HTML + PHP token):
session_start();
if (empty($_SESSION['csrf_token'])) {
$_SESSION['csrf_token'] = bin2hex(random_bytes(32));
}
?>
<form method="POST" action="handler.php">
<input type="hidden" name="csrf_token" value="<?php echo $_SESSION['csrf_token']; ?>">
<input type="text" name="email" placeholder="Twój e-mail">
<input type="submit" value="Wyślij">
</form>
Weryfikacja tokena (handler.php):
session_start();
if ($_POST['csrf_token'] !== $_SESSION['csrf_token']) {
die("Nieprawidłowy token CSRF.");
}
3. Rate Limiting – ograniczenie liczby zapytań
Prosty limit oparty na adresie IP i czasie:
session_start();
$ip = $_SERVER['REMOTE_ADDR'];
$time = time();
$limit = 5; // maksymalnie 5 zapytań
$interval = 60; // w ciągu 60 sekund
if (!isset($_SESSION['requests'])) {
$_SESSION['requests'] = [];
}
$_SESSION['requests'] = array_filter($_SESSION['requests'], function($timestamp) use ($time, $interval) {
return ($timestamp > $time - $interval);
});
if (count($_SESSION['requests']) >= $limit) {
die("Zbyt wiele zapytań. Spróbuj ponownie później.");
}
$_SESSION['requests'][] = $time;
4. Prosta walidacja User-Agent
Można zablokować znanych botów:
$userAgent = $_SERVER['HTTP_USER_AGENT'];
$botKeywords = ['bot', 'spider', 'crawler', 'curl'];
foreach ($botKeywords as $keyword) {
if (stripos($userAgent, $keyword) !== false) {
die("Dostęp zabroniony.");
}
}
5. Behavioral CAPTCHA – czas wypełnienia formularza
Zabezpieczenia behavioralne polegają na analizie zachowania użytkownika w celu odróżnienia człowieka od bota. Przykładowe cechy analizowane to: czas wypełniania formularza, ruchy myszy, kliknięcia czy interakcje z elementami strony.
Poniżej znajdziesz prosty przykład zabezpieczenia behavioralnego w PHP i JavaScript – mierzymy czas, jaki użytkownik potrzebuje, aby wysłać formularz. Boty zazwyczaj robią to natychmiast.
HTML + JavaScript (formularz z pomiarem czasu)
<form method="POST" action="handler.php" onsubmit="return addTime()">
<input type="email" name="email" required placeholder="Twój e-mail">
<input type="hidden" name="form_time" id="form_time" value="">
<input type="submit" value="Wyślij">
</form>
<script>
const start = Date.now();
function addTime() {
const end = Date.now();
const seconds = Math.round((end - start) / 1000);
document.getElementById("form_time").value = seconds;
return true;
}
</script>
PHP – weryfikacja zachowania (czas wypełnienia)
$minTime = 5; // minimalny czas (sekundy), jaki człowiek potrzebuje na wypełnienie formularza
if (!isset($_POST['form_time']) || $_POST['form_time'] < $minTime) {
die("Podejrzana aktywność. Formularz wysłany zbyt szybko.");
}
Opcjonalne rozwinięcia:
- dodaj ruchy myszy lub kliknięcia przy użyciu
addEventListener()
i przekaż liczbę interakcji do PHP; - połącz z analizą IP lub user-agent;
- dodaj scoring (np. reCAPTCHA v3 działa w ten sposób).
Zestawienie znanych botów
Wyszukiwarki i indeksowanie stron
Bot | Opis |
---|---|
Googlebot | Bot Google indeksujący strony internetowe. |
Bingbot | Indeksuje witryny dla wyszukiwarki Bing. |
YandexBot | Bot wyszukiwarki rosyjskiej Yandex. |
Baiduspider | Bot chińskiej wyszukiwarki Baidu. |
DuckDuckBot | Bot DuckDuckGo zbierający dane do wyszukiwarki. |
Sogou Spider | Indeksuje strony dla chińskiej wyszukiwarki Sogou. |
Exabot | Francuski bot wyszukiwarki Exalead. |
SeznamBot | Czeski bot wyszukiwarki Seznam. |
YouBot | Bot indeksujący dane dla wyszukiwarki You.com. |
TimpiBot | Bot nowej zdecentralizowanej wyszukiwarki Timpi. |
Boty AI / Chatboty / LLM-y
Bot | Opis |
---|---|
GPTBot | Bot OpenAI służący do zbierania danych treningowych dla modeli GPT. |
ClaudeBot | Bot firmy Anthropic zasilający model Claude. |
PerplexityBot | Bot wyszukiwarki AI Perplexity.ai. |
Cohere-AI | Bot firmy Cohere do analizy danych językowych. |
AI2Bot | Bot Allen Institute for AI do badań i eksploracji semantycznej. |
MistralAI-User | Crawler wykorzystywany przez Mistral do trenowania modeli językowych. |
SEO, marketing i analityka
Bot | Opis |
---|---|
AhrefsBot | Zbiera dane SEO dla narzędzia Ahrefs. |
SemrushBot | Podobnie – bot narzędzia SEMrush. |
MJ12bot | Używany przez Majestic SEO do zbierania danych linków. |
DotBot | Bot Moz (wcześniej Open Site Explorer). |
MegaIndex | Rosyjski bot SEO monitorujący linki i widoczność. |
ZoominfoBot | Zbiera dane firm do celów B2B i marketingowych. |
Agregacja danych i crawling ogólny
Bot | Opis |
---|---|
CCBot | Crawler Common Crawl – otwarta baza indeksu WWW. |
CensysInspect | Bot Censys.io – skanuje internet w celach badawczych (cybersecurity). |
Diffbot | Bot przekształcający strony WWW w strukturalne dane (np. dla AI). |
omgili | Bot agregujący dane z forów, blogów i komentarzy. |
Bytespider | Bot firmy ByteDance (TikTok) do eksploracji treści. |
Boty social media
Bot | Opis |
---|---|
FacebookExternalHit | Indeksuje treści strony internetowej, udostępnionej w aplikacji z rodziny Meta. |
Meta-ExternalAgent | Szkolenie modeli AI lub ulepszanie produktow poprzez bezpośrednie indeksowanie treści. |
Meta-ExternalFetcher | Pobieranie linków w celu obsługi określonych funkcji produktu. |
Twitterbot | Służy do tworzenia podglądów linków na Twitterze/X. |
LinkedInBot | Renderuje podglądy linków w LinkedIn. |
Pinterestbot | Indeksuje grafiki i linki dla Pinterest. |
Mobilne i komercyjne boty firmowe
Bot | Opis |
---|---|
Applebot | Bot Apple służący Siri i Spotlight. |
Amazonbot | Bot Amazona do analizy treści np. dla Alexa. |
AdsBot-Google / Mobile / Video / News / Image | Różne boty Google do oceny reklam, treści mobilnych, newsów i multimediów. |
Google-Read-Aloud | Umożliwia odczytywanie treści przez zamianę tekstu ze stron internetowych na mowę (TTS). |
Narzędzia techniczne / testowe
Bot | Opis |
---|---|
Screaming Frog SEO Spider | Desktopowe narzędzie do audytów SEO, które symuluje bota. |
PhantomJS | Headless browser do automatyzacji i testów. |
python-requests | Biblioteka Python do wykonywania zapytań HTTP – często wykorzystywana przez własne skrypty. |
curl / wget | Narzędzia terminalowe do pobierania danych – często w botach i crawlerach. |
Podsumowanie
Ochrona przed botami to złożony proces. Nie ma jednej uniwersalnej metody – skuteczna strategia polega na połączeniu kilku warstw zabezpieczeń. Najlepiej zacząć od CAPTCHA, rate limiting i honeypotów, a następnie rozważyć wdrożenie WAF i zaawansowanej analizy ruchu.
Pamiętaj: Równowaga między bezpieczeństwem a wygodą użytkownika to klucz.