Bot- und Spider Blocking, Teil 1
Wer regelmäßig seine Logfiles durchsieht, wird immer wieder auf Referrer Spam, auf dubiose Spider und Bots, auf E-Mail Adressen Sammler und natürlich auf Einträge von Offline Readern stoßen, die gleich die komplette Website inklusive aller Bilder etc. herunterladen. Diese ganzen unerwünschten und sinnlosen Zugriffe bedeuten eine ziemliche Verschwendung von Traffic und Bandbreite.
Es gibt mehrere Arten, bestimmte User Agents, IPs oder Referrer zu blockieren. Die einfachste Methode, User Agents zu auszuschließen, ist sicherlich, die Datei robots.txt entsprechend anzupassen. Leider halten sich diejenigen, die man aussperren will, in den seltensten Fällen an die robots.txt, so dass man anders vorgehen muss.
Ich beschränke mich hier auf zwei Möglichkeiten: das Blockieren über eine PHP Datei und das Blockieren über das Apache Modul mod_rewrite mit Hilfe der .htaccess Datei (wird in Teil 2 erklärt).
Blockieren per PHP
Für diejenigen, denen mod_rewrite nicht zur Verfügung steht oder die ihre .htaccess Datei nicht ändern wollen, gibt es die Möglichkeit, mit PHP bestimmte User auszusperren. Ich stelle hier nur ein Grundgerüst zur Verfügung, dass noch an eigene Bedürfnisse angepasst, bzw. mit Ihren eigenen User Agents, Referrern und IPs, die Sie blockieren wollen, aufgefüllt werden muss.
<?php
$block = false;
//User Agent blockieren --------
$useragentliste = array(
"LinkWalker",
"TurnitinBot",
"UbiCrawler",
"Wget",
"SiteSucker"
);
foreach ($useragentliste as $i) {
if (strpos ($HTTP_USER_AGENT, $i) !== false) {
$block = true;
}
}
// Referrer blockieren ---------
$referrerliste = array(
"sexsq",
"spampoison",
"amateurxpass"
);
foreach ($referrerliste as $i) {
if (strpos ($HTTP_REFERER, $i) !== false) {
$block = true;
}
}
// IP blockieren ----------------
$ipliste = array(
"211.152.14.",
"209.167.50.22"
);
foreach ($ipliste as $i) {
if (strpos ($REMOTE_ADDR, $i) !== false) {
$block = true;
}
}
// Header senden ---------------
if ($block == true) {
header("HTTP/1.1 403 Forbidden");
exit;
}
?>
Dieses Skript speichern Sie z.B. als „blocker.inc.php“ und kopieren es auf Ihren Server. Jede Datei, die Sie vor Zugriffen schützen wollen, muss als erste Zeile noch folgenden Zusatz erhalten:
<?php include_once("/Serverpfad/zu/blocker.inc.php"); ?>
Wenn Sie wissen wollen, ob das ganze dann auch funktioniert, gehen Sie einfach zu WannaBrowser und tragen dort einen User Agent aus Ihrer blocker.inc.php und Ihre eigene URL in die entsprechenden Felder ein.
Wenn der anschließende HTML Output mit „HTTP/1.1 403“ beginnt, können Sie sich freuen: es hat geklappt.
Ähnliche Beiträge:
Spam von dsd.net Olé, Olé Olé Olé...
Kommentare:
Bei den Kommentaren handelt es sich um fremde Inhalte, die sich „esse est percipi“ nicht zueigen macht. Verantwortlich für den Inhalt eines Kommentars ist der jeweilige Verfasser.
soifz genau sowas suche ich, aber was tun wenns nicht klappt?
wannabrowser zeigt mir ungeniert alles was es nicht soll.
und das eintragen der eigenen ip war auch schnuppe.
woran kann es liegen?
Hm, an Wannabrowser liegt es nicht – ich habe gerade nochmal verschiedenene Referrer und User Agents, die ich bei mir blocke, ausgetestet. Wie erwartet, kommt ein „HTTP/1.1 403 Forbidden“.
Vielleicht hat das mit der Einbindung nicht geklappt?! Die Zeile, mit der die blocker.inc.php eingebunden wird, funktioniert so erst mal nur innerhalb von .php Dateien. Soll sie auch mit .html oder .htm Dateien funktionieren, muss man in die .htaccess folgende Zeile eintragen, dann werden HTML Dateien als PHP Dateien interpretiert und das includen funktioniert:
AddType application/x-httpd-php .html .htm
HTH, Michael
Keine Ahnung was ich da vor ein paar Tagen verbockt habe, aber ich habe eine andere Lösung gefunden, siehe
http://www.phphulp.nl/php/scripts/8/70
So gehts zumindest auch.
Naja, glaub ich zumindest … seitdem hat der doofe Spamer zumindest nimmer rumgeschmiert :)
Gruss,
Zucker :)
Vielen Dank! Jetzt mal schauen, ob der Kommentarspam abnimmt.
Hi!
Ich hatte gerade versucht, mittels des Skripts auch IPs zu blockieren, von denen aus Inhalte ausgelesen und geframt werden (siehe http://www.muepe.de/index.php?itemid=315). Wenn ich das PHP in meine Seite include bekomme ich allerdings, wenn ich den entsprechenden Link auf der Seite des Newsgrabbers klicke, folgende Fehlermeldung:
Warning: Cannot modify header information – headers already sent by (output started at *eine Systemdatei meiner Weblogsoftware*.php:61) in antinewsgrabber.inc.php on line 42
Kann ich dem irgendwie abhelfen? Kann ich möglicherweise, anstatt des Ausdrucks
@
if ($block == true) {
header(„HTTP/1.1 403 Forbidden“);
exit;
}
@
irgendeinen anderen verwenden (Weiterleitung auf eine Nichtexistente Seite oder andere lustige Sachen) ???
Vielen Dank schonmal und schöne Weihnachten,
Peter
Ich habe zwischenzeitlich eine Lösung gefunden. Vielen Dank für das schöne Skript!!!
Sehr interessante Sache das, wenn ich es hier auch sehr spät erst entdeckt habe…
Mein Problem ist, das mein Kontakt Formular in letzter Zeit von Spammern mißbraucht wird, um Spammails zu versenden. Die verärgerten Empfänger sehen mich dann als Versender – na dankeschön!
Deine PHP Lösung greift in diesem Falle leider nicht so richtig, weil der User Agent von den Bots natürlich nicht angegeben wird. Filtern mit der IP ist auch unnütz, weil die mit Sicherheit keine statische verwenden.
Meine Idee ist folgende: Kann man Bots über das Kriterium „User Agent angegeben oder nicht“ ausschließen? Sprich: wenn keiner angegeben, dann kommt er auch nicht rein.
Grüße
Maxx
Kommentar schreiben:
FAQ (Häufig gestellte Fragen)
Kommentare:
- Michael Preidel zu Harbor – Sicherer Hafen [Testflight]
- Henning zu Harbor – Sicherer Hafen [Testflight]
- Michael Preidel zu Harbor – Sicherer Hafen [Testflight]
- Michael Preidel zu Harbor – Sicherer Hafen [Testflight]
- Mesrop zu Harbor – Sicherer Hafen [Testflight]
- Michael Preidel zu Hopper 1.0b7 (Update: 1.0b9)
Schlagwörter

