Ich habe EXTREME Bot-Probleme auf einigen meiner Websites in meinem Hosting-Konto. Die Bots nutzen über 98% meiner CPU-Ressourcen und 99% meiner Bandbreite für mein gesamtes Hosting-Konto. Diese Bots generieren mehr als 1 GB Datenverkehr pro Stunde für meine Websites. Der tatsächliche menschliche Datenverkehr für alle diese Websites beträgt weniger als 100 MB / Monat .
Ich habe sowohl die robots.txt- als auch die .htaccess-Datei eingehend untersucht, um diese Bots zu blockieren, aber alle Methoden sind fehlgeschlagen.
Ich habe auch Code in die robots.txt-Dateien eingefügt, um den Zugriff auf die Skriptverzeichnisse zu blockieren, aber diese Bots (Google, MS Bing und Yahoo) ignorieren die Regeln und führen die Skripte trotzdem aus.
Ich möchte die Google-, MS Bing- und Yahoo-Bots nicht vollständig blockieren, aber ich möchte die Crawling-Rate dort begrenzen. Das Hinzufügen einer Crawl-Delay-Anweisung in der robots.txt-Datei verlangsamt die Bots nicht. Mein aktueller robots.txt- und .htacces-Code für alle Websites ist unten angegeben.
Ich habe sowohl Microsoft- als auch Google-Webmaster-Tools eingerichtet, um die Crawling-Rate auf das absolute Minimum zu verlangsamen, aber sie treffen diese Websites immer noch mit einer Rate von 10 Treffern / Sekunde.
Jedes Mal, wenn ich eine Datei hochlade, die einen Fehler verursacht, fällt der gesamte VPS-Webserver innerhalb von Sekunden aus, sodass ich aufgrund des Ansturms der Treffer dieser Bots nicht einmal auf die Site zugreifen kann, um das Problem zu beheben.
Was kann ich tun, um den Datenverkehr auf meinen Websites zu stoppen?
Ich habe in den letzten Monaten mehrmals versucht, mein Webhosting-Unternehmen (site5.com) zu diesem Problem zu befragen, und sie können mir bei diesem Problem nicht helfen.
Was ich wirklich brauche, ist zu verhindern, dass die Bots das Skript rss2html.php ausführen. Ich habe sowohl Sitzungen als auch Cookies ausprobiert und beide sind fehlgeschlagen.
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
UPDATE ZUR ANZEIGE DES HINZUGEFÜGTEN BOT-CHECK-CODES DES BENUTZERAGENTEN
<?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");
}
}
}
?>
Ich habe außerdem Folgendes oben im Skript rss2html.php hinzugefügt
// 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");}
quelle
robots.txt
? Es kann einige Zeit dauern, bis die Roboter die aktualisierte Version gelesen haben.rss2html.php
Ihre Website verwendet? über PHP gehören, Weiterleitungen, Ajax ....?file_get_contents
...? Scheint ziemlich seltsam. Die Datei befindet sich auf einem anderen Server oder so?Antworten:
Wenn
rss2html.php
es nicht direkt vom Client verwendet wird (dh wenn PHP es immer verwendet und nicht als Link oder so), vergessen Sie, Bots zu blockieren. Alles, was Sie wirklich tun müssen, ist eine Konstante oder etwas auf der Hauptseite zu definieren, danninclude
das andere Skript. Überprüfen Sie im anderen Skript, ob die Konstante definiert ist, und geben Sie einen 403-Fehler oder eine leere Seite oder was auch immer aus, wenn sie nicht definiert ist.Damit dies funktioniert, müssen Sie
include
statt verwendenfile_get_contents
, da letztere entweder nur die Datei einlesen (wenn Sie einen lokalen Pfad verwenden) oder in einem ganz anderen Prozess ausführen (wenn Sie ' eine URL verwenden). Aber es ist die Methode, die Sachen wie Joomla! wird verwendet, um zu verhindern, dass ein Skript direkt aufgenommen wird. Verwenden Sie einen Dateipfad anstelle einer URL, damit der PHP-Code nicht bereits analysiert wird, bevor Sie versuchen, ihn auszuführen.Noch besser wäre es,
rss2html.php
unter dem Dokumentstamm herauszukommen, aber einige Hosts machen dies schwierig. Ob dies eine Option ist, hängt vom Setup Ihres Servers / Hosts ab.quelle
Sie können Ihr Skript so einstellen, dass basierend auf der von den Bots bereitgestellten Benutzeragentenzeichenfolge ein 404-Fehler ausgegeben wird. Sie erhalten schnell den Hinweis und lassen Sie in Ruhe.
Durchsuchen Sie Ihre Protokolle und lehnen Sie Bingbot usw. auf ähnliche Weise ab - dies stoppt die Anfragen nicht, spart jedoch möglicherweise Bandbreite - geben Sie Googlebot einen Vorgeschmack auf seine eigene Medizin - Mwhahahahaha!
Aktualisiert
Wenn Sie sich Ihren Code ansehen, denke ich, dass Ihr Problem hier ist:
Wenn es sich um böswillige Bots handelt, können sie von überall her kommen. Nehmen Sie diese
$ipaddress
Klausel heraus und werfen Sie eine 301- oder 404-Antwort auf sie.Direkt an der Seite der Box denken
Googlebot versteht Formulare - oder - Javascript nicht. Sie können also Ihre Links dynamisch generieren oder die Nutzer auf eine Schaltfläche klicken lassen, um zu Ihrem Code zu gelangen (mit einem geeigneten Token im Anhang).
<a href="#" onclick="document.location='rss2html.php?validated=29e0-27fa12-fca4-cae3';">Rss2html.php</a>
quelle
PHP Limit / Block Website Anfragen für Spinnen / Bots / Clients etc.
Hier habe ich eine PHP-Funktion geschrieben, die unerwünschte Anfragen blockieren kann, um Ihren Website-Verkehr zu reduzieren. Gut für Spinnen, Bots und nervige Kunden.
CLIENT / Bots Blocker
DEMO: http://szczepan.info/9-webdesign/php/1-php-limit-block-website-requests-for-spiders-bots-clients-etc.html
CODE:
quelle
Es ist wahrscheinlich, dass Ihre Website von gefälschten Google-Bots indiziert wird. Sie können versuchen, einen Scheck hinzuzufügen und 404 für alle gefälschten Google Bot-Anfragen bereitzustellen.
In diesem Artikel wird erläutert, wie Sie Googlebot überprüfen: http://googlewebmastercentral.blogspot.com/2006/09/how-to-verify-googlebot.html
Sie können Ihre Aufzeichnungen auch anhand bekannter gefälschter Bots überprüfen: http://stopmalvertising.com/security/fake-google-bots.html
quelle
Sie sollten in erster Linie sicherstellen, dass jede von einem Useragent angeforderte Seite, unabhängig davon, welchen missbräuchlichen Crawler Sie haben, eine statische Seite erhält.
Ein Apache mod_rewrite mit einer Bedingung oder gleichwertig mit Ihrem http-Server. Für Apache so etwas:
quelle
Um mit dem Beitrag von smassey fortzufahren, können Sie verschiedene Bedingungen festlegen:
Auf diese Weise greifen die Bots immer noch auf Ihre Seiten zu, aber nicht auf diese. Da es seltsam ist, dass die (legitimen) Bots sich nicht an Regeln halten, haben Sie Verweise, die Bots aus anderen Quellen auf Ihre Seite senden (Weiterleitung von Domainnamen, ...)
quelle
Ich habe das gleiche Problem mit dem Skript gelöst, das unter http://perishablepress.com/blackhole-bad-bots/ verfügbar ist . Mit diesem Blackhole-Ansatz habe ich eine Liste bösartiger IP-Adressen gesammelt und diese dann mit .htaccess abgelehnt. (Dies ist nicht obligatorisch, da das Skript selbst das Verbot ausführt. Ich muss jedoch die Serverlast reduzieren, indem ich das PHP-Parsing für bekannte unerwünschte IPs vermeide.) In drei Tagen ging mein Datenverkehr von 5 GB pro Tag auf 300 MB zurück, was ruhig erwartet wird.
Auf dieser Seite finden Sie auch eine vollständige Liste der Zugriffsregeln zum Blockieren vieler bekannter Junk-Bots. http://www.askapache.com/htaccess/blocking-bad-bots-and-scrapers-with-htaccess.html
quelle
Dieses Skript macht nicht das, was der Kommentar sagt, sondern das genaue Gegenteil. Dadurch werden die Bots immer durchgelassen, da die Sitzungsvariable niemals festgelegt wird, wenn der Bot Ihr Skript anfordert. Möglicherweise wird nur verhindert, dass legitime Anforderungen (von index.php oder mobile.php) das Skript mehrmals aufrufen.
Um zu verhindern, dass ein Bot auf Ihr Skript zugreift, sollten Sie den Zugriff nur zulassen, wenn tatsächlich eine Sitzungsvariable (oder ein Cookie) festgelegt ist. Vorausgesetzt natürlich, der (böswillige) Bot akzeptiert keine Cookies. (Wir wissen, dass der echte Googlebot dies nicht tut.)
Wie bereits erwähnt, würde das Platzieren von rss2html.php über dem Webstamm (außerhalb des öffentlichen Webspace) einen Bot daran hindern, direkt auf das Skript zuzugreifen - aber Sie sagen, dies verursacht andere Probleme? Oder legen Sie es in einem Verzeichnis ab und schützen Sie dieses Verzeichnis mit .htaccess. Oder können Sie sogar nur die Datei selbst in .htaccess vor direkten Anforderungen schützen?
quelle
Richten Sie Ihre Domain auf Cloudflare ein (kostenloser Service hierfür). Sie blockieren böswillige Bots auf Domänenebene, bevor sie Ihren Server erreichen. Dauert ca. 20 Minuten, muss nie mit dem Code Affen.
Ich benutze diesen Service auf allen meinen Websites und allen Client-Websites. Sie identifizieren böswillige Bots basierend auf einer Reihe von Techniken, einschließlich der Nutzung des Projekts Honey Pot.
quelle
Sie müssen lediglich ein SSL-Zertifikat für apache / nginx / email / ftp auf Ihrem Server installieren. Wenn Sie HSTS aktivieren, müssen Sie auch Ihre Datei ssl.conf bearbeiten, damit SSLv2 SSLv3 TLSv1 deaktiviert ist und keine eingehenden Verbindungen zulässt. Stärken Sie Ihren Server richtig und Sie werden keine Probleme von Bots haben.
quelle