Undercover-MSN-Bot aufdecken
September 2009
Es ist wohl bekannt, dass der Bot der MSN-Suche bzw. von Bing manchmal verdeckt unterwegs ist, was verfälschte Statistiken zur Folge hat, wie beispielsweise in einem Artikel von Webmasterpro beschrieben, manchmal bringt er auch gleich noch einen Fake-Referrer mit.
Allerdings lässt sich dieser Undercover-Robot mittels PHP ganz einfach identifizieren, da er gezwungenermassen seine IP preisgibt. Denn der dazugehörige Host sagt alles.
In folgendem Beispiel gibt sich ein MSNBot als Internet Explorer 6 aus. Eine einfache Statistik-Software würde ihn als IE-User, welcher mit Bing die Seite gefunden hat, abstempeln.
Wer aufgrund Performance-Komplikationen auf die Funktion gethostbyaddr() verzichten möchte, kann sich auch nur an der IP orientieren. Man checkt dazu, ob die sich die IP innerhalb eines bestimmten Bereichs befindet.
Allerdings lässt sich dieser Undercover-Robot mittels PHP ganz einfach identifizieren, da er gezwungenermassen seine IP preisgibt. Denn der dazugehörige Host sagt alles.
In folgendem Beispiel gibt sich ein MSNBot als Internet Explorer 6 aus. Eine einfache Statistik-Software würde ihn als IE-User, welcher mit Bing die Seite gefunden hat, abstempeln.
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SLCC1; .NET CLR 1.1.4325 ...
Referer: http://www.bing.com/search?q=irgendwas
IP: 65.55.109.131
Host: msnbot-65-55-109-131.search.msn.com
Der Host lässt sich mit der PHP-Funktion gethostbyaddr() ausfindig machen. Somit kann man den Bot erkennen, egal ob er offiziell ein Bot ist oder ob er undercover arbeitet.<?php
$host = gethostbyaddr($_SERVER['REMOTE_ADDR']);
if(strpos($host, '.msn.com')!==false){
# Es ist ein MSNBot
}
?>
Mit dieser Methode lassen sich auch gleich noch Fake-MSNBots erkennen, also MSNBots, die keine sind.Wer aufgrund Performance-Komplikationen auf die Funktion gethostbyaddr() verzichten möchte, kann sich auch nur an der IP orientieren. Man checkt dazu, ob die sich die IP innerhalb eines bestimmten Bereichs befindet.
<?php
if(preg_match('#^(65\.5[2-5]|207.46)\.#', $_SERVER['REMOTE_ADDR'])){
# IP-Range: 65.52.0.0 - 65.55.255.255, 207.46.0.0 - 207.46.255.255
# Es ist ein MSNBot
}
?>
Die IP-Ranges lassen sich beliebig erweitern.

Andere Einträge
- Dateiendung erkennen
- IP verkürzen
- Herkunftsland des Besuchers ermitteln
- is_utf8() – auf UTF-8 prüfen
- array_map_recursive()
Das sieht dann ungefähr so aus:
RewriteCond %{HTTP_REFERER} msn\.com [NC]
RewriteRule (.*) http://www.msn.com [R=403,L]
Man kann in der .htaccess auch mit IP-Ranges arbeiten. Dann muss man keine php-Rechenzeit für die Bots verwenden und kann sie direkt aussperren lassen :)