Подтвердить что ты не робот

Как определить веб-искателя?

Как я могу отфильтровать хиты с веб-браузеров и т.д. Хиты, которые не являются человеческими.

Я использую maxmind.com для запроса города из IP. Это не совсем дешево, если мне приходится платить за ВСЕ хиты, включая веб-браузеры, роботы и т.д.

4b9b3361

Ответ 1

Есть два общих способа обнаружения роботов, и я бы назвал их "Вежливый/Пассивный" и "Агрессивный". В принципе, вы должны дать вашему сайту психологическое расстройство.

Вежливый

Это способы вежливо сказать сканерам, что они не должны сканировать ваш сайт и ограничивать, как часто вы сканируете. Вежливость обеспечивается с помощью robots.txt файла, в котором вы указываете, какие боты, если таковые имеются, должны быть разрешены для обхода вашего сайта и как часто ваш веб-сайт может сканировать. Это предполагает, что робот, с которым вы имеете дело, вежлив.

Агрессивное

Еще один способ сохранить ботов с вашего сайта - это агрессивно.

Пользовательский агент

Некоторое агрессивное поведение включает (как ранее упоминалось другими пользователями) фильтрацию строк пользовательского агента. Это, наверное, самый простой, но и наименее надежный способ определить, является ли он пользователем или нет. Многие боты, как правило, обманывают пользовательские агенты, а некоторые делают это по законным причинам (т.е. Хотят только обходить мобильный контент), в то время как другие просто не хотят, чтобы их идентифицировали как ботов. Хуже того, некоторые боты обманывают законных/вежливых агентов бота, таких как пользовательские агенты google, microsoft, lycos и других сканеров, которые обычно считаются вежливыми. Опора на пользовательский агент может быть полезной, но не сама по себе.

Есть более агрессивные способы борьбы с роботами, которые обманывают пользовательские агенты И не соблюдают ваш файл robots.txt:

Ловушка для ловушек

Мне нравится думать об этом как о "Venus Fly Trap", и это в основном наказывает любого бота, который хочет играть с вами.

Ловушка-бот - это, вероятно, самый эффективный способ найти ботов, которые не прилипают к вашему файлу robots.txt, фактически не ухудшая удобство использования вашего сайта. Создание ловушки бота гарантирует, что будут захвачены только боты, а не реальные пользователи. Основной способ сделать это - настроить каталог, который вы специально отмечаете как вне пределов вашего файла robots.txt, поэтому любой вежливый робот не попадет в ловушку. Второе, что вы делаете, - это "скрытая" ссылка с вашего сайта на каталог ловушки бота (это гарантирует, что настоящие пользователи никогда туда не поедут, так как реальные пользователи никогда не нажимают на невидимые ссылки). Наконец, вы запрещаете любой IP-адрес, который отправляется в каталог ловушки бота.

Вот несколько инструкций о том, как добиться этого: Создайте ловушку для ботов (или в вашем случае: Ловушка PHP-робота).

Примечание: некоторые боты достаточно умны, чтобы читать ваш файл robots.txt, видеть все каталоги, которые вы отметили как "вне пределов", и STILL игнорируют ваши настройки вежливости (такие как скорость сканирования и разрешенные боты), Эти боты, вероятно, не попадут в вашу ловушку ботов, несмотря на то, что они не вежливы.

Violent

Я думаю, что это слишком агрессивно для широкой аудитории (и общего использования), поэтому, если есть дети в возрасте до 18 лет, тогда, пожалуйста, заберите их в другую комнату!

Вы можете сделать ловушку бота насильственной, просто не указывая файл robots.txt. В этой ситуации ANY BOT, которая сканирует скрытые ссылки, вероятно, попадет в ловушку бота, и вы можете запретить все боты, период!

Причина, по которой это не рекомендуется, заключается в том, что вы можете захотеть, чтобы некоторые боты сканировали ваш сайт (например, Google, Microsoft или другие боты для индексации сайта). Позволяя вежливо сканировать ваш сайт ботами из Google, Microsoft, Lycos и т.д., Вы убедитесь, что ваш сайт индексируется, и он появляется, когда люди ищут его в своей любимой поисковой системе.

Саморазрушающий

Еще один способ ограничить, что боты могут сканировать на вашем веб-сайте, - это обслуживание CAPTCHA или других проблем, которые бот не может решить. Это происходит за счет ваших пользователей, и я думаю, что все, что делает ваш сайт менее полезным (например, CAPTCHA), является "саморазрушительным". Это, конечно же, на самом деле не заставит бота многократно пытаться сканировать ваш сайт, он просто сделает ваш сайт очень неинтересным для них. Есть способы "обойти" CAPTCHA, но их трудно реализовать, поэтому я не собираюсь вникать в это слишком много.

Заключение

Для ваших целей, вероятно, лучший способ борьбы с ботами - использовать комбинацию вышеупомянутых стратегий:

  • Фильтровать пользовательские агенты.
  • Настройка ловушки бота (сильная).

Поймайте всех ботов, которые попадают в яростную ловушку ботов, и просто черные списки своих IP-адресов (но не блокируют их). Таким образом, вы все равно получите "преимущества" от обхода ботов, но вам не придется платить, чтобы проверить IP-адреса, которые указаны в черном списке из-за перехода в вашу ловушку бота.

Ответ 2

Вы можете проверить USER_AGENT, что-то вроде:

function crawlerDetect($USER_AGENT)
{
    $crawlers = array(
    array('Google', 'Google'),
    array('msnbot', 'MSN'),
    array('Rambler', 'Rambler'),
    array('Yahoo', 'Yahoo'),
    array('AbachoBOT', 'AbachoBOT'),
    array('accoona', 'Accoona'),
    array('AcoiRobot', 'AcoiRobot'),
    array('ASPSeek', 'ASPSeek'),
    array('CrocCrawler', 'CrocCrawler'),
    array('Dumbot', 'Dumbot'),
    array('FAST-WebCrawler', 'FAST-WebCrawler'),
    array('GeonaBot', 'GeonaBot'),
    array('Gigabot', 'Gigabot'),
    array('Lycos', 'Lycos spider'),
    array('MSRBOT', 'MSRBOT'),
    array('Scooter', 'Altavista robot'),
    array('AltaVista', 'Altavista robot'),
    array('IDBot', 'ID-Search Bot'),
    array('eStyle', 'eStyle Bot'),
    array('Scrubby', 'Scrubby robot')
    );

    foreach ($crawlers as $c)
    {
        if (stristr($USER_AGENT, $c[0]))
        {
            return($c[1]);
        }
    }

    return false;
}

// example

$crawler = crawlerDetect($_SERVER['HTTP_USER_AGENT']);

Ответ 3

Пользовательский агент ($_SERVER['HTTP_USER_AGENT']) часто определяет, является ли соединительный агент браузером или роботом. Просмотрите журналы/аналитики для пользовательских агентов сканеров, которые посещают ваш сайт. Фильтр соответственно.

Обратите внимание, что пользовательский агент является заголовком, предоставленным клиентским приложением. Таким образом, это может быть почти что угодно, и ему не следует доверять 100%. Планируйте соответственно.

Ответ 4

Проверка User-Agent защитит вас от законных ботов, таких как Google и Yahoo.

Однако, если вас также поражают спам-боты, вероятность того, что сравнение User-Agent не будет защищать вас, так как эти боты обычно в любом случае создают общую строку User-Agent. В этом случае вам потребуется внедрить более сложные меры. Если требуется ввод данных пользователя, будет работать простая схема проверки изображений, такая как ReCaptcha или phpMeow.

Если вы хотите отфильтровать все образы страниц от бота, к сожалению, нет 100% надежного способа сделать это, если бот создает свои учетные данные. Это всего лишь раздражающий факт жизни в Интернете, который веб-админы должны терпеть.

Ответ 5

Я нашел этот пакет, он активно развивается, и мне это очень нравится:

https://github.com/JayBizzle/Crawler-Detect

Это просто:

use Jaybizzle\CrawlerDetect\CrawlerDetect;

$CrawlerDetect = new CrawlerDetect;

// Check the user agent of the current 'visitor'
if($CrawlerDetect->isCrawler()) {
    // true if crawler user agent detected
}

// Pass a user agent as a string
if($CrawlerDetect->isCrawler('Mozilla/5.0 (compatible; Sosospider/2.0; +http://help.soso.com/webspider.htm)')) {
    // true if crawler user agent detected
}

// Output the name of the bot that matched (if any)
echo $CrawlerDetect->getMatches();

Ответ 6

useragentstring.com служит для использования lilst, который вы можете использовать для анализа пользовательской строки:

$api_request="http://www.useragentstring.com/?uas=".urlencode($_SERVER['HTTP_USER_AGENT'])."&getJSON=all";
$ua=json_decode(file_get_contents($api_request));
if($ua["agent_type"]=="Crawler") die();