Zbieranie logów to kluczowy element monitorowania działania każdej strony internetowej. Ale co zrobić, gdy wśród odwiedzających znajdują się zarówno ludzie, jak i boty? Jak rozróżnić prawdziwego użytkownika od automatycznego robota? Oto przewodnik, który pomoże Ci zrozumieć podstawy i zaimplementować odpowiednie rozwiązania w PHP.
Dlaczego warto odróżniać użytkowników od botów?
Zanim przejdziemy do technicznej strony zagadnienia, warto wyjaśnić, po co w ogóle przejmować się botami:
- Statystyki: Bez rozróżnienia, Twoje dane analityczne mogą być zafałszowane.
- Bezpieczeństwo: Boty często próbują znaleźć luki w zabezpieczeniach strony.
- Wydajność: Częste odwiedziny botów mogą obciążać serwer, wpływając na czas ładowania strony.
Zrozumienie różnicy między użytkownikiem a botem pozwala Ci lepiej zarządzać ruchem na stronie i skuteczniej reagować na potencjalne zagrożenia.
Jak odróżnić użytkownika od robota?
Nie ma jednego idealnego sposobu, ale istnieje kilka technik, które razem mogą dać Ci całkiem dobry obraz. Zobaczmy, jak można to zrobić w PHP.
1. Analiza nagłówka User-Agent
Nagłówek User-Agent
to pierwsza linia obrony przed botami. Każda przeglądarka i bot identyfikują się w specyficzny sposób. W PHP możesz łatwo odczytać ten nagłówek:
<?php $userAgent = $_SERVER['HTTP_USER_AGENT']; if (strpos($userAgent, 'bot') !== false || strpos($userAgent, 'crawl') !== false) { echo "To wygląda na bota."; } else { echo "Wygląda na prawdziwego użytkownika."; } ?>
Plusy:
- Szybka i prosta metoda.
- Można łatwo zidentyfikować popularne boty, jak Googlebot czy Bingbot.
Minusy:
- Sprytne boty potrafią podszywać się pod przeglądarki.
2. Sprawdzanie zachowań na stronie
Ludzie zachowują się inaczej niż boty. Na przykład, użytkownik nie kliknie 100 linków w ciągu sekundy. Możesz to zaimplementować, logując aktywność odwiedzających:
<?php session_start(); $time = time(); if (!isset($_SESSION['last_visit'])) { $_SESSION['last_visit'] = $time; } $timeDifference = $time - $_SESSION['last_visit']; $_SESSION['last_visit'] = $time; if ($timeDifference < 1) { echo "Podejrzane zachowanie! Może to bot?"; } else { echo "Zachowanie wygląda normalnie."; } ?>
Plusy:
- Łatwe do wdrożenia.
- Może zidentyfikować boty działające w sposób agresywny.
Minusy:
- Niektóre boty mogą być „wolne” i wpasowywać się w ludzkie tempo.
3. Reverse DNS Lookup
Reverse DNS pozwala sprawdzić, czy adres IP odwiedzającego należy do znanego dostawcy botów, np. Googlebot.
<?php $ip = $_SERVER['REMOTE_ADDR']; $host = gethostbyaddr($ip); if (strpos($host, 'googlebot.com') !== false) { echo "To Googlebot."; } else { echo "Nie wygląda na Googlebota."; } ?>
Plusy:
- Działa na botach pochodzących od znanych dostawców.
Minusy:
- Nie wszystkie boty mają zarejestrowane domeny.
- Może być czasochłonne.
4. Sprawdzanie JavaScript i Cookies
Większość botów nie wykonuje JavaScript ani nie obsługuje cookies. Możesz to wykorzystać, ustawiając prosty test:
Kod w PHP (ustawienie cookies):
<?php setcookie('human_check', '1', time() + 3600, '/'); ?>
Kod w JS (potwierdzenie cookies):
<script> document.cookie = "js_test=1; path=/"; </script>
Weryfikacja po stronie serwera:
<?php if (isset($_COOKIE['human_check']) && isset($_COOKIE['js_test'])) { echo "To prawdopodobnie człowiek."; } else { echo "Wygląda na bota."; } ?>
Plusy:
- Działa na botach, które nie obsługują JS ani cookies.
Minusy:
- Nowoczesne boty potrafią obsługiwać JavaScript i cookies.
5. Wykorzystanie Captcha
Captcha, jak reCAPTCHA, to popularne narzędzie do identyfikacji ludzi. W PHP możesz łatwo zaimplementować reCAPTCHA:
Formularz HTML:
<form method="post" action="verify.php"> <div class="g-recaptcha" data-sitekey="YOUR_SITE_KEY"></div> <input type="submit" value="Wyślij"> </form> <script src="https://www.google.com/recaptcha/api.js" async defer></script>
Kod PHP do weryfikacji:
<?php $secretKey = 'YOUR_SECRET_KEY'; $response = $_POST['g-recaptcha-response']; $remoteIp = $_SERVER['REMOTE_ADDR']; $verifyUrl = "https://www.google.com/recaptcha/api/siteverify"; $data = [ 'secret' => $secretKey, 'response' => $response, 'remoteip' => $remoteIp, ]; $options = [ 'http' => [ 'header' => "Content-type: application/x-www-form-urlencoded\r\n", 'method' => 'POST', 'content' => http_build_query($data), ], ]; $context = stream_context_create($options); $result = file_get_contents($verifyUrl, false, $context); $resultJson = json_decode($result); if ($resultJson->success) { echo "To człowiek."; } else { echo "Wygląda na bota."; } ?>
Plusy:
- Bardzo skuteczna metoda.
- Trudna do obejścia dla botów.
Minusy:
- Może irytować użytkowników.
Łączenie metod dla najlepszych rezultatów
Żadna pojedyncza metoda nie jest w 100% skuteczna. Najlepsze rezultaty uzyskasz, łącząc różne techniki:
- Analizuj
User-Agent
. - Loguj i monitoruj zachowania.
- Sprawdzaj cookies i obsługę JavaScript.
- Używaj Captcha dla bardziej podejrzanych przypadków.
Rozróżnianie użytkowników od botów w PHP wymaga trochę pracy, ale korzyści są warte wysiłku. Poprawisz swoje statystyki, zwiększysz bezpieczeństwo i odciążysz serwer. Wypróbuj powyższe metody i dostosuj je do swoich potrzeb. Z czasem stworzysz system, który skutecznie radzi sobie z botami, nie irytując przy tym prawdziwych użytkowników.