Verifica di un Googlebot
-
28-09-2019 - |
Domanda
ho intenzione di bloccare tutti i bot ad eccezione dei grandi motori di ricerca. Uno dei miei metodi di blocco sarà quello di verificare la presenza di "linguaggio": Accept-Language: Se non ha Accept-Language indirizzo IP del bot sarà bloccato fino al 2037. Googlebot non ha Accept-Language, voglio verificarlo con DNS ricerca
<?php
gethostbyaddr($_SERVER['REMOTE_ADDR']);
?>
E 'ok per utilizzare gethostbyaddr
, qualcuno può passare il mio "protezione gethostbyaddr"?
Soluzione
Altri suggerimenti
//The function
function is_google() {
return strpos($_SERVER['HTTP_USER_AGENT'],"Googlebot");
}
Il metodo consigliato da Google è quello di fare una ricerca DNS inversa (gethostbyaddr) al fine di ottenere il nome dell'host associato e quindi risolvere tale nome in un indirizzo IP (gethostbyname) e confrontarlo con il REMOTE_ADDR (perché ricerche inverse possono essere falsificati , anche).
Ma attenzione, lokups finali richiedono tempo e possono seriamente rallentare la vostra pagina web (forse verificare la presenza di user agent prima).
https://webmasters.googleblog.com/2006 /09/how-to-verify-googlebot.html
In aggiunta alla risposta di 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;
}