Обнаружение "стелс-сканеров"

107

Какие есть варианты обнаружения веб-сканеров, которые не хотят быть обнаруженными?

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

Я не говорю о хороших сканерах, таких как googlebot и Yahoo! Хлюпать. Считаю бота хорошим, если он:

  1. идентифицирует себя как бот в строке пользовательского агента
  2. читает robots.txt (и подчиняется ему)

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

Есть несколько лазеек, которые можно создать в обновленном списке (спасибо Крису, gs) :

  1. Добавление каталога, только указанного (помеченного как запрещенный) в robots.txt,
  2. Добавление невидимых ссылок (возможно, отмеченных как rel = "nofollow"?),
    • style = "display: none;" по ссылке или родительскому контейнеру
    • помещается под другим элементом с более высоким z-index
  3. определить, кто не понимает заглавные буквы,
  4. определить, кто пытается отправлять ответы, но всегда не вводит Captcha.
  5. обнаруживать GET-запросы к POST-ресурсам
  6. определить интервал между запросами
  7. определить порядок запрашиваемых страниц
  8. определить, кто (последовательно) запрашивает ресурсы https через http
  9. определить, кто не запрашивает файл изображения (это в сочетании со списком пользовательских агентов известных браузеров с поддержкой изображений работает на удивление хорошо)

Некоторые ловушки срабатывают как «хорошие», так и «плохие» боты. вы можете объединить их с белым списком:

  1. Это запускает ловушку
  2. Это запрос robots.txt?
  3. Он не запускает другую ловушку, потому что подчиняется robots.txt

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

Какие существуют методы автоматического обнаружения поисковых роботов, пытающихся маскироваться под обычных посетителей.

Обновление
Вопрос не в том, как поймать каждого краулера. Вопрос в том, как увеличить вероятность обнаружения краулера.

Некоторые пауки действительно хороши и действительно разбирают и понимают html, xhtml, css javascript, скрипт VB и т. Д.
У меня нет иллюзий: я не смогу победить их.

Однако вы удивитесь, насколько глупы некоторые краулеры. Лучшим примером глупости (на мой взгляд) является приведение всех URL-адресов к нижнему регистру перед их запросом.

А еще есть целая куча сканеров, которые просто «недостаточно хороши», чтобы избежать различных лазеек.

Jacco
источник

Ответы:

15

Некоторое время назад я работал с небольшой хостинг-компанией, чтобы помочь им реализовать решение этой проблемы. Система, которую я разработал, проверяла журналы веб-сервера на предмет чрезмерной активности с любого заданного IP-адреса и выдавала правила брандмауэра для блокировки нарушителей. Он включал белые списки IP-адресов / диапазонов на основе http://www.iplists.com/ , которые затем автоматически обновлялись по мере необходимости путем проверки заявленных строк пользовательского агента и, если клиент утверждал, что является законным пауком, но не на белый список, он выполнил поиск DNS / обратного DNS, чтобы убедиться, что исходный IP-адрес соответствует заявленному владельцу бота. В качестве меры безопасности эти действия были отправлены администратору по электронной почте вместе со ссылками на черный / белый список адресов в случае неправильной оценки.

Я не разговаривал с этим клиентом около 6 месяцев, но, насколько я слышал, система работала достаточно эффективно.

Дополнительный момент: если вы думаете о создании аналогичной системы обнаружения, основанной на ограничении скорости попаданий, обязательно используйте по крайней мере одну минуту (а лучше по крайней мере пятиминутные) итоги. Я вижу много людей , которые говорят о таких схемах , которые хотят блочный кто Tops 5-10 хитов в секунде, которое может генерировать ложные срабатывания на изображение тяжелых страниц (если изображения не будут исключены из бирки) и будет генерировать ложные положительные результаты, когда кто-то вроде меня находит интересный сайт, который он хочет прочитать полностью, поэтому он открывает все ссылки во вкладках для загрузки в фоновом режиме, пока он читает первый.

Дэйв Шерохман
источник
5
Я считаю, что ложное срабатывание из-за блокировки поискового робота полностью убивает веб-трафик. По сути, вы раздражаете 99,8% пользователей своей неудачной попыткой воспрепятствовать поисковым роботам, которые могут легко обойти этот описанный наивный метод. Никогда не рекомендуется отказывать пользователю в доступе или препятствовать ему, потому что это разрушает взаимодействие пользователя с вашим сайтом.
KJW
14

См. Project Honeypot - они устанавливают ловушки для ботов в большом масштабе (и имеют DNSRBL со своими IP-адресами).

Используйте хитрые URL-адреса и HTML:

<a href="https://example.com/"> = http://example.com/ on http pages.
<a href="page&amp;&#x23;hash"> = page& + #hash

В HTML вы можете использовать множество приемов с комментариями, элементами CDATA, сущностями и т. Д.:

<a href="foo<!--bar-->"> (comment should not be removed)
<script>var haha = '<a href="bot">'</script>
<script>// <!-- </script> <!--><a href="bot"> <!-->
Корнель
источник
9

Простое решение - создать ссылку и сделать ее невидимой.

<a href="iamabot.script" style="display:none;">Don't click me!</a>

Конечно, вы должны ожидать, что некоторые люди, просматривающие исходный код, перейдут по этой ссылке, чтобы увидеть, куда она ведет. Но вы можете предоставить этим пользователям капчу ...

Разумеется, действительные сканеры также будут переходить по ссылке. Но вы не должны реализовывать rel = nofollow, а ищите признак действительного краулера. (как пользовательский агент)

Георг Шёлли
источник
1
Если бот не проверит атрибуты CSS ссылки и не перейдет по ссылке, потому что она не видна пользователю ...
Боб Сомерс,
1
Было бы лучше
пометить
Отличная идея. Возможно, измените текст на "." и стиль css, соответствующий фону, что делает его невидимым для большинства пользователей? Или запустить сценарий, чтобы скрыть его через 1 секунду, оставив его видимым только для бота, который не может связать команду скрытия javascript со ссылкой?
Underverse
1
Остерегайтесь штрафных санкций с точки зрения SEO.
Альфред Уоллес
6

Вы не указали одну вещь, которая обычно используется для обнаружения плохих поисковых роботов.

Скорость поиска, хорошие поисковые роботы будут разбивать свои обращения, чтобы не заваливать сайт запросами. Плохие сделают одно из трех:

  1. нажимать последовательные ссылки одну за другой
  2. переходить по последовательным ссылкам в некоторой параллельной последовательности (2 или более одновременно).
  3. переходить по последовательным ссылкам с фиксированным интервалом

Кроме того, некоторые программы автономного просмотра будут поглощать несколько страниц, я не уверен, какой порог вы хотите использовать, чтобы начать блокировку по IP-адресу.

Этот метод также будет обнаруживать программы зеркалирования, такие как fmirror или wget.

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

На самом деле, где-то я слышал идею, я не помню где, что если пользователь получает слишком много данных в килобайтах, ему может быть предложена капча с просьбой доказать, что он не бот. Я никогда не видел, чтобы это реализовано.

Обновление о скрытии ссылок

Что касается скрытия ссылок, вы можете поместить один div под другим с помощью CSS (поместив его первым в порядке отрисовки) и, возможно, установив z-порядок. Бот не мог проигнорировать это, не проанализировав весь ваш javascript, чтобы увидеть, является ли это меню. В некоторой степени ссылки внутри невидимых элементов DIV также нельзя игнорировать, если бот не проанализирует весь javascript.

Если довести эту идею до конца, неназванный javascript, который потенциально мог бы отображать скрытые элементы, мог бы обмануть подмножество ботов для синтаксического анализа javascript. И это не так уж много работы.

Крис
источник
16
Главный недостаток методов «игнорирование JavaScript означает, что вы бот»: некоторые из нас используют подключаемый модуль NoScript. Ни один сайт не использует для меня JavaScript, если я не внесу этот сайт в белый список, и я почти уверен, что я не бот.
Дэйв Шерохман,
2
боты теперь могут выполнять Javascript ... Ради бога, 2013 год. так вот и весь аргумент. Кто сказал, что поисковые роботы посещают сайты при последовательном выборе? еще одно огромное предположение.
KJW
1
JavaScript был предназначен только для отображения ссылки приманки. Идея состоит в том, что боты будут анализировать javascript, который сделает ссылку на приманку видимой, что повысит вероятность их перехода по ссылке. Однако для реального пользователя код, делающий ссылку видимой, никогда не будет выполнен. Таким образом, пользователи NoScript вместе со всеми, кто не выполняет функции случайным образом, будут в порядке. Тем не менее, я не уверен, почему / как бот будет случайным образом выполнять код, и если бы он выполнял статический анализ, чтобы определить, может ли элемент стать видимым, это был бы один необычный бот.
Rick
4

Я слышал, что один простой метод обнаружения ботов для форм - это метод скрытого ввода. Если вы пытаетесь защитить форму, введите в нее данные с идентификатором, который выглядит вполне допустимым. Затем используйте css во внешнем файле, чтобы скрыть его. Или, если вы действительно параноик, настройте что-то вроде jquery, чтобы скрыть поле ввода при загрузке страницы. Если вы сделаете это правильно, я полагаю, что боту будет очень сложно понять. Вы знаете, что у этих ботов есть такая природа, чтобы заполнять все на странице, особенно если вы дадите своему скрытому вводу идентификатор что-то вроде id = "fname" и т. Д.

Agile Noob
источник
2
нет, если боты могут дождаться завершения jquery, как это может делать обычный браузер. Это бы хорошо сработало в начале
нулевых
3

На самом деле не так просто следить за хорошими строками пользовательского агента. Версии браузеров приходят и уходят. Составление статистики о строках пользовательского агента по разному поведению может выявить интересные вещи.

Я не знаю, насколько это можно автоматизировать, но, по крайней мере, это одна особенность.

iny
источник
3

Не тестировалось, но вот хороший список пользовательских агентов, из которых вы можете сделать регулярное выражение. Могу помочь вам в этом:

ADSARobot|ah-ha|almaden|aktuelles|Anarchie|amzn_assoc|ASPSeek|ASSORT|ATHENS|Atomz|attach|attache|autoemailspider|BackWeb|Bandit|BatchFTP|bdfetch|big.brother|BlackWidow|bmclient|Boston\ Project|BravoBrian\ SpiderEngine\ MarcoPolo|Bot\ mailto:craftbot@yahoo.com|Buddy|Bullseye|bumblebee|capture|CherryPicker|ChinaClaw|CICC|clipping|Collector|Copier|Crescent|Crescent\ Internet\ ToolPak|Custo|cyberalert|DA$|Deweb|diagem|Digger|Digimarc|DIIbot|DISCo|DISCo\ Pump|DISCoFinder|Download\ Demon|Download\ Wonder|Downloader|Drip|DSurf15a|DTS.Agent|EasyDL|eCatch|ecollector|efp@gmx\.net|Email\ Extractor|EirGrabber|email|EmailCollector|EmailSiphon|EmailWolf|Express\ WebPictures|ExtractorPro|EyeNetIE|FavOrg|fastlwspider|Favorites\ Sweeper|Fetch|FEZhead|FileHound|FlashGet\ WebWasher|FlickBot|fluffy|FrontPage|GalaxyBot|Generic|Getleft|GetRight|GetSmart|GetWeb!|GetWebPage|gigabaz|Girafabot|Go\!Zilla|Go!Zilla|Go-Ahead-Got-It|GornKer|gotit|Grabber|GrabNet|Grafula|Green\ Research|grub-client|Harvest|hhjhj@yahoo|hloader|HMView|HomePageSearch|http\ generic|HTTrack|httpdown|httrack|ia_archiver|IBM_Planetwide|Image\ Stripper|Image\ Sucker|imagefetch|IncyWincy|Indy*Library|Indy\ Library|informant|Ingelin|InterGET|Internet\ Ninja|InternetLinkagent|Internet\ Ninja|InternetSeer\.com|Iria|Irvine|JBH*agent|JetCar|JOC|JOC\ Web\ Spider|JustView|KWebGet|Lachesis|larbin|LeechFTP|LexiBot|lftp|libwww|likse|Link|Link*Sleuth|LINKS\ ARoMATIZED|LinkWalker|LWP|lwp-trivial|Mag-Net|Magnet|Mac\ Finder|Mag-Net|Mass\ Downloader|MCspider|Memo|Microsoft.URL|MIDown\ tool|Mirror|Missigua\ Locator|Mister\ PiX|MMMtoCrawl\/UrlDispatcherLLL|^Mozilla$|Mozilla.*Indy|Mozilla.*NEWT|Mozilla*MSIECrawler|MS\ FrontPage*|MSFrontPage|MSIECrawler|MSProxy|multithreaddb|nationaldirectory|Navroad|NearSite|NetAnts|NetCarta|NetMechanic|netprospector|NetResearchServer|NetSpider|Net\ Vampire|NetZIP|NetZip\ Downloader|NetZippy|NEWT|NICErsPRO|Ninja|NPBot|Octopus|Offline\ Explorer|Offline\ Navigator|OpaL|Openfind|OpenTextSiteCrawler|OrangeBot|PageGrabber|Papa\ Foto|PackRat|pavuk|pcBrowser|PersonaPilot|Ping|PingALink|Pockey|Proxy|psbot|PSurf|puf|Pump|PushSite|QRVA|RealDownload|Reaper|Recorder|ReGet|replacer|RepoMonkey|Robozilla|Rover|RPT-HTTPClient|Rsync|Scooter|SearchExpress|searchhippo|searchterms\.it|Second\ Street\ Research|Seeker|Shai|Siphon|sitecheck|sitecheck.internetseer.com|SiteSnagger|SlySearch|SmartDownload|snagger|Snake|SpaceBison|Spegla|SpiderBot|sproose|SqWorm|Stripper|Sucker|SuperBot|SuperHTTP|Surfbot|SurfWalker|Szukacz|tAkeOut|tarspider|Teleport\ Pro|Templeton|TrueRobot|TV33_Mercator|UIowaCrawler|UtilMind|URLSpiderPro|URL_Spider_Pro|Vacuum|vagabondo|vayala|visibilitygap|VoidEYE|vspider|Web\ Downloader|w3mir|Web\ Data\ Extractor|Web\ Image\ Collector|Web\ Sucker|Wweb|WebAuto|WebBandit|web\.by\.mail|Webclipping|webcollage|webcollector|WebCopier|webcraft@bea|webdevil|webdownloader|Webdup|WebEMailExtrac|WebFetch|WebGo\ IS|WebHook|Webinator|WebLeacher|WEBMASTERS|WebMiner|WebMirror|webmole|WebReaper|WebSauger|Website|Website\ eXtractor|Website\ Quester|WebSnake|Webster|WebStripper|websucker|webvac|webwalk|webweasel|WebWhacker|WebZIP|Wget|Whacker|whizbang|WhosTalking|Widow|WISEbot|WWWOFFLE|x-Tractor|^Xaldon\ WebSpider|WUMPUS|Xenu|XGET|Zeus.*Webster|Zeus [NC]

Взято из: http://perishablepress.com/press/2007/10/15/ultimate-htaccess-blacklist-2-compressed-version/

Брайан Армстронг
источник
1

Вы также можете проверить рефералов. Отсутствие реферала может вызвать подозрение на бота. Плохой переход означает, что это не браузер.

Добавление невидимых ссылок (возможно, отмеченных как rel = "nofollow"?),

* style="display: none;" on link or parent container
* placed underneath another element with higher z-index

Я бы не стал этого делать. Вы можете попасть в черный список Google из-за черного SEO :)

Дунайский моряк
источник
1
Что именно и почему вы попали в черный список?
Conteh
1

В настоящее время я работаю в компании, которая сканирует веб-сайты для их классификации. Мы также проверяем сайты на наличие вредоносных программ.

По моему опыту, блокировщики номер один нашего поискового робота (который, конечно, использует IE или Firefox UA и не подчиняется robots.txt. Да) - это сайты, на которых намеренно размещено вредоносное ПО. Это неприятно, потому что сайт затем возвращается к человеку, который должен вручную загрузить сайт, классифицировать его и проверить на наличие вредоносных программ.

Я просто говорю, что, блокируя поисковые роботы, вы попадаете в плохую компанию.

Конечно, если они ужасно грубы и поглощают тонны вашей пропускной способности, это другое дело, потому что тогда у вас есть веская причина.

Zan Lynx
источник
15
Извините, но если вы запускаете поисковый робот, который не подчиняется robots.txt, вы не подчиняетесь правилам. Не соблюдая правила, вы сами попадаете в очень плохую компанию. Предполагая, что соблюдение правил, установленных владельцем веб-сайта (в robots.txt), является плохой практикой, вы ошибочно переворачиваете проблему с ног на голову. Вы в основном заявляете, что не понимаете, кто является полноправным владельцем контента.
Jacco
11
@Jacco: Если бы краулер, ищущий вредоносное ПО, подчинялся правилам, он никогда бы их не нашел. Поговорите с авторами вредоносных программ.
Zan Lynx
5
@Jacco: Процент законных сайтов, которые пытаются заблокировать несовместимые сканеры? Менее 1%. Вредоносные сайты что пробуют? Более 60%. Так что да, это подозрительно.
Zan Lynx
4
@Jacco на самом деле нет, в сети нет владельцев контента, если он общедоступен. Тот, кто делает это без копирования и вставки вручную, должен получить награду, а не наказание. Вся эта концепция авторского права должна быть отменена в Интернете. Только творческие инновации и доверие могут создать ценность и заслужить внимание людей, а не угроза непрозрачной правовой завесы.
KJW
Все эти выбросы указывают на то, что человек, управляющий сайтом, вложил в него много времени и размышлений, и у него есть определенная степень технических навыков. Так что, конечно, это исключает большую часть кривой нормального распределения.
Парфянский выстрел
1

Люди продолжают обращаться к обычным поисковым роботам, но не к поисковым роботам, специализирующимся на вашем веб-сайте.

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

Лучшие системы используют ИИ (например, Linkedin) используют ИИ для решения этой проблемы.
Самым простым решением является запись парсеров журналов, которые анализируют IP-соединения и просто заносят эти IP-адреса в черный список или обслуживают капчу, по крайней мере, временно.

например,
если IP X виден каждые 2 секунды при подключении к foo.com/cars/*.htmlдругим страницам, но не к другим страницам - это, скорее всего, бот или голодный опытный пользователь.

В качестве альтернативы существуют различные проблемы с javascript, которые действуют как защита (например, система защиты от ботов Cloudflare), но они легко решаемы, вы можете написать что-то свое, и это может быть достаточно сдерживающим фактором, чтобы сделать это не стоящим усилий для краулера.

Однако вы должны задать вопрос, готовы ли вы давать ложные срабатывания законным пользователям и создавать для них неудобства, чтобы предотвратить трафик ботов. Защита общедоступных данных - невозможный парадокс.

оборота Гранитозавр
источник
-1

Короткий ответ: если программист среднего уровня знает, что он делает, вы не сможете обнаружить краулера, не затронув реального пользователя. Имея свою информацию публично, вы не сможете защитить ее от краулера ... это как первая поправка справа :)

Alex MAN
источник