2010-06-20 25 views
1

Je vais bloquer tous les robots sauf les gros moteurs de recherche. Une de mes méthodes de blocage sera de vérifier la "langue": Accept-Language: Si elle n'a pas de langue d'acceptation, l'adresse IP du bot sera bloquée jusqu'en 2037. Googlebot n'a pas de langue d'acceptation, je veux la vérifier avec DNS rechercheVérification d'un Googlebot

<?php 
gethostbyaddr($_SERVER['REMOTE_ADDR']); 
?> 

est-il autorisé à utiliser gethostbyaddr, quelqu'un peut-il passer ma "protection gethostbyaddr"?

+1

Sure - empoisonnement DNS. L'autre préoccupation est probablement la robustesse de votre vérification de la "liste blanche". Est-ce que "google" dans la réponse est assez bon - ou vérifiez-vous réellement que le suffixe du domaine soit ".google.com" (et est-ce que c'est même un test valide)? Et, vous souciez-vous de bloquer tout le monde dans le cas où votre DNS tombe en panne, expire, etc.? – opello

+0

Les recherches de dons inversés ne donnent aucune protection Je peux configurer n'importe quel nom que je veux. – MrTux

Répondre

5
+0

En fait, c'est une meilleure méthode que la mienne. C'est ce que j'aime de SO ... vous apprendrez quelque chose tous les jours. Merci! – Cristian

+0

@Christian - Pour être franc, je pense que le tien est assez bon. Le prix d'un faux-positif est très bas, je pense. Je suis plus préoccupé par les faux négatifs dans ce cas: les gens ordinaires avec un UA qui d'une manière ou d'une autre n'envoient pas un en-tête 'Accept-Language' (ne me demandez pas lequel; un test rapide a révélé que curl n'envoie pas). –

1
//The function 
function is_google() { 
    return strpos($_SERVER['HTTP_USER_AGENT'],"Googlebot"); 
} 
+3

"Googlebot" ne signifie pas que c'est le vrai Googlebot. – ilhan

+1

Bien sûr que non, mais ce n'est pas un gros problème après tout ... que peut faire un utilisateur qui feint l'agent utilisateur? Peut-être créer un clone Google, oui, ce serait un beau projet. – Cristian

+1

Pas grave. Tout ce qu'ils peuvent faire est d'explorer tout votre site, régurgiter avec un meilleur référencement que le vôtre (car ils ont aiguisé comment classer sans avoir à se soucier de détails comme le contenu de qualité), puis ils utilisent leur ferme de lien w/high PR à Concourir avec vous dans le classement Google, sur votre propre site. – joedevon

1

En plus de la réponse de Cristian:

function is_valid_google_ip($ip) { 

    $hostname = gethostbyaddr($ip); //"crawl-66-249-66-1.googlebot.com" 

    return preg_match('/\.googlebot|google\.com$/i', $hostname); 
} 

function is_valid_google_request($ip=null,$agent=null){ 

    if(is_null($ip)){ 

     $ip=$_SERVER['REMOTE_ADDR']; 
    } 

    if(is_null($agent)){ 

     $agent=$_SERVER['HTTP_USER_AGENT']; 
    } 

    $is_valid_request=false; 

    if (strpos($agent, 'Google')!==false && is_valid_google_ip($ip)){ 

     $is_valid_request=true; 
    } 

    return $is_valid_request; 
} 
1

La méthode recommandée par Google est de faire une recherche inversée dns (gethostbyaddr) afin d'obtenir le nom d'hôte associé puis résoudre ce nom à une adresse IP (gethostbyname) et comparez-le à remote_addr (car les recherches inversées peuvent aussi être truquées). Mais attention, les lokups de fin prennent du temps et peuvent sérieusement ralentir votre page Web (peut-être vérifier d'abord l'agent utilisateur).

Voir https://webmasters.googleblog.com/2006/09/how-to-verify-googlebot.html

+0

Est-ce que cela fonctionne aussi pour Yahoo, Bing, MSN, etc.? – mseifert