Comment identifier web-crawler?
Comment puis-je filtrer les hits de webcrawlers etc. Frappe qui n'est pas humain..
J'utilise maxmind.com pour demander la ville de L'IP.. Ce n'est pas tout à fait pas cher si je dois payer pour tous les hits, y compris les webcrawlers, les robots, etc.
6 réponses
Il existe deux façons générales de détecter les robots et je les appellerais "poli / passif" et "agressif". Fondamentalement, vous devez donner à votre site web un trouble psychologique.
Poli
Ce sont des moyens de dire poliment aux robots d'exploration qu'ils ne devraient pas explorer votre site et de limiter la fréquence à laquelle vous êtes rampé. La politesse est assurée par des robots .txt fichier dans lequel vous spécifiez quels robots, le cas échéant, devraient être autorisés à explorer votre site web et à quelle fréquence votre site web peut être ramper. Cela suppose que le robot avec lequel vous avez affaire est poli.
Agressif
Une autre façon de garder les bots hors de votre site est d'être agressif.
L'Agent Utilisateur
Certains comportements agressifs incluent (comme mentionné précédemment par d'autres utilisateurs) le filtrage des chaînes user-agent. C'est probablement la plus simple, mais aussi le moins fiable de détecter si un utilisateur ou pas. Beaucoup de bots ont tendance à usurper les agents utilisateurs et certains le font pour des raisons légitimes (c'est-à-dire qu'ils veulent seulement explorer le contenu mobile), tandis que d'autres ne veulent tout simplement pas être identifiés comme des bots. Pire encore, certains robots usurpent des agents de bot légitimes/Polis, tels que les agents utilisateurs de google, microsoft, lycos et autres robots d'exploration qui sont généralement considérés comme Polis. S'appuyer sur l'agent utilisateur peut être utile, mais pas par lui-même.
Il existe des moyens plus agressifs pour traiter les robots qui usurpent les agents utilisateurs et ne respectent pas vos robots.fichier txt:
Bot Piège
J'aime penser à cela comme un "Piège À Mouches de Vénus", et cela punit fondamentalement tout bot qui veut jouer des tours avec vous.
Un piège de bot est probablement le moyen le plus efficace de trouver des bots qui n'adhèrent pas à vos robots.fichier txt sans nuire réellement à la facilité d'utilisation de votre site web. La création d'un piège de bot garantit que seuls les bots sont capturés et non de vrais utilisateurs. La façon de base de le faire est de configurer un répertoire que vous marquez spécifiquement comme hors limites dans vos robots.txt fichier, de sorte que tout robot qui est poli ne tombera pas dans le piège. La deuxième chose que vous faites est de placer un lien" caché " de votre site Web dans le répertoire Bot trap (cela garantit que les vrais utilisateurs n'y iront jamais, puisque les vrais utilisateurs ne cliqueront jamais sur des liens invisibles). Enfin, vous bannissez toute adresse IP qui va dans le répertoire Bot trap.
Voici quelques instructions sur la façon d'y parvenir: créez un piège de bot (ou dans votre cas: un piège de bot PHP ).
Remarque: bien sûr, certains robots sont assez intelligents pour lire vos robots.fichier txt, voir tous les répertoires que vous avez marqués comme "hors limites" et toujours ignorer vos paramètres de politesse (tels que le taux d'analyse et les robots autorisés). Ces robots ne tomberont probablement pas dans votre piège de bot malgré le fait qu'ils ne sont pas Polis.
Violent
Je pense que c'est en fait trop agressif pour le grand public (et l'usage général), donc s'il y a des enfants de moins de 18 ans, alors veuillez les emmener à un autre la salle!
Vous pouvez rendre le piège de bot "violent " en ne spécifiant simplement pas de robots.fichier txt. Dans cette situation Tout BOT qui explore les liens cachés finira probablement dans le piège du bot et vous pouvez interdire tous les bots, point!
La raison pour laquelle cela n'est pas recommandé est que vous pouvez réellement vouloir que certains robots explorent votre site Web (comme Google, Microsoft ou d'autres robots pour l'indexation de site). Permettre à votre site web d'être poliment exploré par les robots de Google, Microsoft, Lycos, etc. veillera à ce que votre site est indexé et il apparaît lorsque les gens recherchent sur leur moteur de recherche préféré.
Auto-Destructeurs
Une autre façon de limiter ce que les bots peuvent explorer sur votre site web est de servir des CAPTCHAs ou d'autres défis qu'un bot ne peut pas résoudre. Cela se fait au détriment de vos utilisateurs et je pense que tout ce qui rend votre site web moins utilisable (comme un CAPTCHA) est "autodestructeur."Ceci, bien sûr, ne sera pas réellement bloquez le bot d'essayer à plusieurs reprises d'explorer votre site Web, cela rendra simplement votre site web très inintéressant pour eux. Il existe des moyens de "contourner" les CAPTCHAs, mais ils sont difficiles à mettre en œuvre, donc je ne vais pas trop y plonger.
Conclusion
Pour vos besoins, la meilleure façon de traiter les bots est probablement d'utiliser une combinaison des stratégies mentionnées ci-dessus:
- filtrer les agents utilisateurs.
- configurer un piège de bot (le violent un).
Attrapez tous les robots qui entrent dans le piège violent des robots et énumérez simplement leurs adresses IP (mais ne les bloquez pas). De cette façon, vous obtiendrez toujours les "avantages" d'être analysées par les bots, mais vous n'aurez pas à payer pour vérifier les adresses IP qui sont sur la liste noire en raison d'aller à votre bot piège.
Vous pouvez vérifier USER_AGENT, quelque chose comme:
function crawlerDetect($USER_AGENT)
{
$crawlers = array(
array('Google', 'Google'),
array('msnbot', 'MSN'),
array('Rambler', 'Rambler'),
array('Yahoo', 'Yahoo'),
array('AbachoBOT', 'AbachoBOT'),
array('accoona', 'Accoona'),
array('AcoiRobot', 'AcoiRobot'),
array('ASPSeek', 'ASPSeek'),
array('CrocCrawler', 'CrocCrawler'),
array('Dumbot', 'Dumbot'),
array('FAST-WebCrawler', 'FAST-WebCrawler'),
array('GeonaBot', 'GeonaBot'),
array('Gigabot', 'Gigabot'),
array('Lycos', 'Lycos spider'),
array('MSRBOT', 'MSRBOT'),
array('Scooter', 'Altavista robot'),
array('AltaVista', 'Altavista robot'),
array('IDBot', 'ID-Search Bot'),
array('eStyle', 'eStyle Bot'),
array('Scrubby', 'Scrubby robot')
);
foreach ($crawlers as $c)
{
if (stristr($USER_AGENT, $c[0]))
{
return($c[1]);
}
}
return false;
}
// example
$crawler = crawlerDetect($_SERVER['HTTP_USER_AGENT']);
L'agent utilisateur($_SERVER['HTTP_USER_AGENT']
) identifie souvent si l'agent de connexion est un navigateur ou un robot. Consultez les journaux / analyses pour les agents utilisateurs des robots d'exploration qui visitent votre site. Filtrer en conséquence.
Notez que l'agent utilisateur est un en-tête fourni par l'application cliente. En tant que tel, il peut être à peu près n'importe quoi et ne devrait pas faire confiance à 100%. Planifier en conséquence.
La vérification de L'agent utilisateur vous protégera des robots légitimes comme Google et Yahoo.
Cependant, si vous êtes également touché par des robots collecteurs de mails, il est probable que la comparaison entre les agents utilisateur ne vous protégera pas, car ces robots forgent généralement une chaîne D'Agent utilisateur commune de toute façon. Dans ce cas, vous devrez implorer des mesures plus sophistiquées. Si l'entrée de l'utilisateur est requise, un schéma de vérification d'image simple comme ReCaptcha ou phpMeow fonctionnera.
Si vous cherchez à filtrer toutes les pages d'un bot, malheureusement, il n'y a pas de moyen fiable à 100% pour le faire si le bot forge ses informations d'identification. C'est juste un fait ennuyeux de la vie sur internet que les administrateurs web doivent supporter.
J'ai trouvé ce paquet, il est activement développé et je l'aime beaucoup jusqu'à présent:
Https://github.com/JayBizzle/Crawler-Detect
C'est simple comme ceci:
use Jaybizzle\CrawlerDetect\CrawlerDetect;
$CrawlerDetect = new CrawlerDetect;
// Check the user agent of the current 'visitor'
if($CrawlerDetect->isCrawler()) {
// true if crawler user agent detected
}
// Pass a user agent as a string
if($CrawlerDetect->isCrawler('Mozilla/5.0 (compatible; Sosospider/2.0; +http://help.soso.com/webspider.htm)')) {
// true if crawler user agent detected
}
// Output the name of the bot that matched (if any)
echo $CrawlerDetect->getMatches();
Useragentstring.com {[3] } sert un lilst que vous pouvez utiliser pour analyser le userstring:
$api_request="http://www.useragentstring.com/?uas=".urlencode($_SERVER['HTTP_USER_AGENT'])."&getJSON=all";
$ua=json_decode(file_get_contents($api_request));
if($ua["agent_type"]=="Crawler") die();