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"?

È stato utile?

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;
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top