2010-06-20 2 views
1

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

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

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

+1

Уверенный - отравление DNS. Другая проблема, вероятно, является надежностью проверки вашего «белого списка». Является ли «google» в ответе достаточно хорошим - или вы действительно проверяете суффикс домена как «.google.com» (и это даже действительный тест)? И вы заботитесь о том, чтобы заблокировать всех в случае, если ваш DNS опустится, тайм-аут и т. Д.? – opello

+0

Обратные обратные запросы не дают никакой защиты. Я могу настроить любое имя, которое я хочу. – MrTux

ответ

5
+0

На самом деле, это лучший метод, который мой. Это то, что я люблю от SO ... вы узнаете что-то каждый день. Благодаря! – Cristian

+0

@Christian - Чтобы быть откровенным, я думаю, что ваш хорошо. Думаю, цена ложноположительной очень низкая. Меня больше беспокоят ложные негативы в этом случае: обычные люди с UA, которые каким-то образом не отправляют заголовок «Accept-Language» (не спрашивайте меня, что: быстрый тест показал, что завиток не отправляет один). –

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

«Googlebot» не означает, что это настоящий робот Google. – ilhan

+1

Конечно, нет, но это не очень важно ... что может сделать пользователь, который подделывает пользовательский агент? Возможно, создать клон Google, да, это будет хороший проект. – Cristian

+1

Нет ничего сложного. Все, что они могут сделать, - это сканировать весь сайт, срывать его с помощью лучшего SEO, чем ваш (поскольку они оттачивали, как оценивать без необходимости беспокоиться о деталях, таких как качественный контент), тогда они используют свою ферму ссылок с высоким PR конкурировать с вами в рейтинге Google, на вашем собственном сайте. – joedevon

1

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

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

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

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

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

+0

Это также работает для Yahoo, Bing, MSN и т. Д.? – mseifert

Смежные вопросы