Проверка Googlebot - PullRequest
       44

Проверка Googlebot

3 голосов
/ 20 июня 2010

Я собираюсь заблокировать всех ботов, кроме крупных поисковых систем.Одним из моих методов блокировки будет проверка «языка»: Accept-Language: если у него нет Accept-Language, IP-адрес бота будет заблокирован до 2037 года. У Googlebot нет Accept-Language, я хочу проверить его с помощью DNSlookup

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

Можно ли использовать gethostbyaddr, кто-то может передать мою "защиту gethostbyaddr"?

Ответы [ 4 ]

5 голосов
/ 20 июня 2010
2 голосов
/ 23 мая 2016

Рекомендованный Google способ - сделать обратный поиск в DNS (gethostbyaddr), чтобы получить имя связанного хоста, а затем преобразовать это имя в IP (gethostbyname) и сравнить его с remote_addr (поскольку обратный поиск может быть подделантоже).

Но будьте осторожны, торможение завершается долго и может серьезно замедлить работу вашей веб-страницы (возможно, сначала проверьте наличие агента пользователя).

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

2 голосов
/ 20 июня 2010
//The function
function is_google() {
    return strpos($_SERVER['HTTP_USER_AGENT'],"Googlebot");
}
1 голос
/ 23 мая 2016

В дополнение к ответу Кристиана:

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;
}
...