Mam problemy z botami EXTREME na niektórych moich stronach internetowych na moim koncie hostingowym. Boty wykorzystują ponad 98% moich zasobów procesora i 99% mojej przepustowości dla całego konta hostingowego. Te boty generują ponad 1 GB ruchu na godzinę dla moich witryn. Rzeczywisty ruch ludzki dla wszystkich tych witryn jest mniejszy niż 100 MB / miesiąc .
Przeprowadziłem szeroko zakrojone badania zarówno pliku robots.txt, jak i .htaccess, aby zablokować te boty, ale wszystkie metody zawiodły.
Umieściłem również kod w plikach robots.txt, aby zablokować dostęp do katalogów skryptów, ale te boty (Google, MS Bing i Yahoo) ignorują reguły i mimo to uruchamiają skrypty.
Nie chcę całkowicie blokować botów Google, MS Bing i Yahoo, ale chcę ograniczyć tam szybkość indeksowania. Ponadto dodanie instrukcji opóźnienia indeksowania w pliku robots.txt nie spowalnia botów. Mój aktualny kod robots.txt i .htacces dla wszystkich witryn podano poniżej.
Skonfigurowałem zarówno narzędzia Microsoft, jak i Google dla webmasterów, aby spowolnić indeksowanie do absolutnego minimum, ale wciąż odwiedzają te witryny z szybkością 10 odsłon na sekundę.
Ponadto za każdym razem, gdy przesyłam plik, który powoduje błąd, cały serwer VPS ulega awarii w ciągu kilku sekund, tak że nie mogę nawet uzyskać dostępu do strony, aby rozwiązać problem z powodu ataku trafień tych botów.
Co mogę zrobić, aby zatrzymać ruch w moich witrynach?
W ciągu ostatnich miesięcy próbowałem wiele razy zapytać moją firmę hostingową (site5.com) o ten problem i nie mogą mi pomóc z tym problemem.
Naprawdę potrzebuję, aby Boty nie uruchomiły skryptu rss2html.php. Próbowałem obu sesji i plików cookie i oba zakończyły się niepowodzeniem.
robots.txt
User-agent: Mediapartners-Google
Disallow:
User-agent: Googlebot
Disallow:
User-agent: Adsbot-Google
Disallow:
User-agent: Googlebot-Image
Disallow:
User-agent: Googlebot-Mobile
Disallow:
User-agent: MSNBot
Disallow:
User-agent: bingbot
Disallow:
User-agent: Slurp
Disallow:
User-Agent: Yahoo! Slurp
Disallow:
# Directories
User-agent: *
Disallow: /
Disallow: /cgi-bin/
Disallow: /ads/
Disallow: /assets/
Disallow: /cgi-bin/
Disallow: /phone/
Disallow: /scripts/
# Files
Disallow: /ads/random_ads.php
Disallow: /scripts/rss2html.php
Disallow: /scripts/search_terms.php
Disallow: /scripts/template.html
Disallow: /scripts/template_mobile.html
.htaccess
ErrorDocument 400 http://english-1329329990.spampoison.com
ErrorDocument 401 http://english-1329329990.spampoison.com
ErrorDocument 403 http://english-1329329990.spampoison.com
ErrorDocument 404 /index.php
SetEnvIfNoCase User-Agent "^Yandex*" bad_bot
SetEnvIfNoCase User-Agent "^baidu*" bad_bot
Order Deny,Allow
Deny from env=bad_bot
RewriteEngine on
RewriteCond %{HTTP_user_agent} bot\* [OR]
RewriteCond %{HTTP_user_agent} \*bot
RewriteRule ^.*$ http://english-1329329990.spampoison.com [R,L]
RewriteCond %{QUERY_STRING} mosConfig_[a-zA-Z_]{1,21}(=|\%3D) [OR]
# Block out any script trying to base64_encode crap to send via URL
RewriteCond %{QUERY_STRING} base64_encode.*\(.*\) [OR]
# Block out any script that includes a <script> tag in URL
RewriteCond %{QUERY_STRING} (\<|%3C).*script.*(\>|%3E) [NC,OR]
# Block out any script trying to set a PHP GLOBALS variable via URL
RewriteCond %{QUERY_STRING} GLOBALS(=|\[|\%[0-9A-Z]{0,2}) [OR]
# Block out any script trying to modify a _REQUEST variable via URL
RewriteCond %{QUERY_STRING} _REQUEST(=|\[|\%[0-9A-Z]{0,2})
# Send all blocked request to homepage with 403 Forbidden error!
RewriteRule ^(.*)$ index.php [F,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !^/index.php
RewriteCond %{REQUEST_URI} (/|\.php|\.html|\.htm|\.feed|\.pdf|\.raw|/[^.]*)$ [NC]
RewriteRule (.*) index.php
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization},L]
# Don't show directory listings for directories that do not contain an index file (index.php, default.asp etc.)
Options -Indexes
<Files http://english-1329329990.spampoison.com>
order allow,deny
allow from all
</Files>
deny from 108.
deny from 123.
deny from 180.
deny from 100.43.83.132
AKTUALIZACJA, ABY POKAZAĆ DODANO AGENTA BOTA SPRAWDŹ KOD
<?php
function botcheck(){
$spiders = array(
array('AdsBot-Google','google.com'),
array('Googlebot','google.com'),
array('Googlebot-Image','google.com'),
array('Googlebot-Mobile','google.com'),
array('Mediapartners','google.com'),
array('Mediapartners-Google','google.com'),
array('msnbot','search.msn.com'),
array('bingbot','bing.com'),
array('Slurp','help.yahoo.com'),
array('Yahoo! Slurp','help.yahoo.com')
);
$useragent = strtolower($_SERVER['HTTP_USER_AGENT']);
foreach($spiders as $bot) {
if(preg_match("/$bot[0]/i",$useragent)){
$ipaddress = $_SERVER['REMOTE_ADDR'];
$hostname = gethostbyaddr($ipaddress);
$iphostname = gethostbyname($hostname);
if (preg_match("/$bot[1]/i",$hostname) && $ipaddress == $iphostname){return true;}
}
}
}
if(botcheck() == false) {
// User Login - Read Cookie values
$username = $_COOKIE['username'];
$password = $_COOKIE['password'];
$radio_1 = $_COOKIE['radio_1'];
$radio_2 = $_COOKIE['radio_2'];
if (($username == 'm3s36G6S9v' && $password == 'S4er5h8QN2') || ($radio_1 == '2' && $radio_2 == '5')) {
} else {
$selected_username = $_POST['username'];
$selected_password = $_POST['password'];
$selected_radio_1 = $_POST['group1'];
$selected_radio_2 = $_POST['group2'];
if (($selected_username == 'm3s36G6S9v' && $selected_password == 'S4er5h8QN2') || ($selected_radio_1 == '2' && $selected_radio_2 == '5')) {
setcookie("username", $selected_username, time()+3600, "/");
setcookie("password", $selected_password, time()+3600, "/");
setcookie("radio_1", $selected_radio_1, time()+3600, "/");
setcookie("radio_2", $selected_radio_2, time()+3600, "/");
} else {
header("Location: login.html");
}
}
}
?>
Dodałem również następujące elementy do górnej części skryptu rss2html.php
// Checks to see if this script was called by the main site pages, (i.e. index.php or mobile.php) and if not, then sends to main page
session_start();
if(isset($_SESSION['views'])){$_SESSION['views'] = $_SESSION['views']+ 1;} else {$_SESSION['views'] = 1;}
if($_SESSION['views'] > 1) {header("Location: http://website.com/index.php");}
źródło
robots.txt
? Odczytanie zaktualizowanej wersji przez roboty może zająć trochę czasu.rss2html.php
korzysta z Twojej witryny? przez PHP to między innymi przekierowania, Ajax ....?file_get_contents
... Wydaje się raczej dziwne. Plik jest na innym serwerze czy coś?Odpowiedzi:
Jeśli
rss2html.php
nie jest używany bezpośrednio przez klienta (to znaczy, że PHP zawsze go używa, a nie link lub coś takiego), zapomnij o próbach blokowania botów. Wszystko, co naprawdę musisz zrobić, to zdefiniować stałą lub coś na stronie głównej, a następnieinclude
drugi skrypt. W drugim skrypcie sprawdź, czy stała jest zdefiniowana, i wyrzuć błąd 403 lub pustą stronę lub cokolwiek, jeśli nie jest zdefiniowana.Teraz, aby to zadziałało, musisz użyć
include
zamiast tegofile_get_contents
, ponieważ ten ostatni po prostu wczyta się do pliku (jeśli korzystasz ze ścieżki lokalnej) lub uruchomi się w innym procesie (jeśli „ ponownie używa adresu URL). Ale jest to metoda, która działa jak Joomla! służy do zapobiegania bezpośredniemu włączeniu skryptu. I użyj ścieżki pliku zamiast adresu URL, aby kod PHP nie był już analizowany przed próbą uruchomienia.Jeszcze lepiej byłoby wyprowadzić
rss2html.php
się spod katalogu głównego dokumentu, ale niektóre hosty utrudniają to. To, czy jest to opcja, zależy od konfiguracji serwera / hosta.źródło
Możesz ustawić skrypt, aby generował błąd 404 na podstawie ciągu agenta użytkownika dostarczonego przez boty - szybko dostaną podpowiedź i zostawią cię w spokoju.
Przejrzyj swoje dzienniki i odrzuć Bingbota itp. W podobny sposób - nie powstrzyma to żądań, ale może zaoszczędzić trochę przepustowości - daj Googlebotowi smak własnego leku - Mwhahahahaha!
Zaktualizowano
Patrząc na twój kod, myślę, że twój problem jest tutaj:
Jeśli są złośliwymi botami, mogą pochodzić z dowolnego miejsca, usuń tę
$ipaddress
klauzulę i wyślij im odpowiedź 301 lub 404.Myślenie z boku pudełka
Googlebot nie rozumie formularzy - lub - javascript, więc możesz dynamicznie generować linki lub poprosić użytkowników o kliknięcie przycisku w celu uzyskania dostępu do kodu (z dołączonym odpowiednim tokenem).
<a href="#" onclick="document.location='rss2html.php?validated=29e0-27fa12-fca4-cae3';">Rss2html.php</a>
źródło
PHP Limit / Blokuj żądania strony internetowej dla pająków / botów / klientów itp.
Tutaj napisałem funkcję PHP, która może blokować niechciane żądania w celu ograniczenia ruchu w witrynie. Dobry dla pająków, botów i irytujących klientów.
KLIENT / Blokowanie botów
DEMO: http://szczepan.info/9-webdesign/php/1-php-limit-block-website-requests-for-spiders-bots-clients-etc.html
KOD:
źródło
Twoja witryna jest indeksowana przez fałszywych botów Google. Możesz spróbować dodać czek i podać 404 dla wszystkich fałszywych żądań botów Google.
Oto artykuł wyjaśniający, jak zweryfikować Googlebota: http://googlewebmastercentral.blogspot.com/2006/09/how-to-verify-googlebot.html
Możesz także sprawdzić swoje dane w porównaniu ze znanymi fałszywymi botami: http://stopmalvertising.com/security/fake-google-bots.html
źródło
Naprawdę powinieneś przede wszystkim upewnić się, że każda strona, której zażąda użytkownik, niezależnie od tego, jaki masz niewłaściwy robot, otrzyma stronę statyczną.
Apache mod_rewrite z warunkiem lub równoważny z serwerem http. W przypadku apache coś takiego:
źródło
Aby kontynuować pracę nad postem smassey, możesz nałożyć kilka warunków:
W ten sposób boty nadal uzyskują dostęp do twoich stron, ale nie tylko to. Ponieważ dziwne jest, że (legalne) boty nie przestrzegają reguł, czy masz osoby odsyłające, które wypychają boty na twoją stronę z innych źródeł (przekazywanie nazw domen, ...)
źródło
Rozwiązałem ten sam problem ze skryptem dostępnym na stronie http://perishablepress.com/blackhole-bad-bots/ . Dzięki takiemu podejściu do czarnej dziury zebrałem listę złośliwych adresów IP, a następnie odmówiłem im używania .htaccess. (Co nie jest obowiązkowe, ponieważ sam skrypt blokuje. Ale muszę zmniejszyć obciążenie serwera, unikając analizowania php pod kątem znanych niechcianych IPS) w ciągu trzech dni mój ruch spadł z 5 GB dziennie do 300 MB, co jest cichym oczekiwaniem.
Sprawdź również tę stronę, aby uzyskać pełną listę reguł htaccess, aby zablokować wiele znanych botów. http://www.askapache.com/htaccess/blocking-bad-bots-and-scrapers-with-htaccess.html
źródło
Ten skrypt nie robi tego, co mówi komentarz, w rzeczywistości robi coś zupełnie przeciwnego. To zawsze przepuszcza boty, ponieważ zmienna sesji nigdy nie zostanie ustawiona, gdy bot poprosi o skrypt. Potrafi jedynie zapobiegać wywoływaniu skryptu przez uzasadnione żądania (z index.php lub mobile.php).
Aby uniemożliwić botowi dostęp do skryptu, należy zezwolić na dostęp tylko wtedy, gdy zmienna sesji (lub plik cookie) jest rzeczywiście ustawiona. Zakładając oczywiście, że (złośliwy) bot nie akceptuje plików cookie. (Wiemy, że prawdziwy Googlebot nie.)
Jak już wspomniano, umieszczenie pliku rss2html.php nad katalogiem głównym (poza publiczną przestrzenią internetową) uniemożliwiłoby botowi bezpośredni dostęp do skryptu - ale mówisz, że powoduje to inne problemy? Lub umieść go w katalogu i chroń ten katalog za pomocą .htaccess. A może możesz nawet chronić sam plik w .htaccess przed bezpośrednimi żądaniami?
źródło
Skonfiguruj swoją domenę w Cloudflare (bezpłatna usługa w tym zakresie). Blokują złośliwe boty na poziomie domeny, zanim trafią na Twój serwer. Zajmuje około 20 minut, nigdy nie musisz małpować się z kodem.
Korzystam z tej usługi na wszystkich moich stronach i wszystkich stronach klienckich. Identyfikują złośliwe boty na podstawie wielu technik, w tym wykorzystując projekt Honey Pot.
źródło
Co musisz zrobić, to zainstalować certyfikat SSL na swoim serwerze dla apache / nginx / email / ftp. Włącz HSTS, a także musisz edytować plik ssl.conf, aby SSLv2 SSLv3 TLSv1 były wyłączone i nie pozwalały na połączenia przychodzące. Wzmocnij swój serwer we właściwy sposób, a nie będziesz mieć problemów z botami.
źródło