Программирование Bot Bot

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

  • Если у вас нет идентификатора браузера
  • Если у вас нет идентификатора сеанса
  • Невозможно написать файл cookie

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

Ответы

Ответ 1

Уточнить, почему вы хотите исключить ботов, и насколько вы терпимы к неправильной классификации.

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

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

Если "счастливая среда" удовлетворительна, одним из трюков, которые могут быть полезны, является скрытие ссылок с CSS, чтобы они не были видны пользователям в браузере, но все еще находятся в HTML. Любой агент, который следует за одной из этих "ядовитых" ссылок, является ботом.

Ответ 2

Пользовательские агенты могут быть подделаны. Капча были разбиты. Действительные файлы cookie могут быть отправлены обратно на ваш сервер с запросами страниц. Законные программы, такие как Adobe Acrobat Pro, могут загружаться и загружать ваш веб-сайт за один сеанс. Пользователи могут отключить JavaScript. Поскольку стандартная мера "нормального" поведения пользователя отсутствует, ее нельзя отличить от бота.

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

Ответ 3

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

Большинство ботов не запускают javascript. Используйте javascript для вызова Ajax на сервер, который идентифицирует этот IP-адрес как NonBot. Храните это в течение определенного периода времени, чтобы идентифицировать будущие подключения с этого IP как хорошие клиенты и предотвратить дальнейшие расточительные вызовы javascript.

Ответ 4

Простым тестом является javascript:

<script type="text/javascript">
document.write('<img src="/not-a-bot.' + 'php" style="display: none;">');
</script>

Не-a-bot.php может добавить что-то в сеанс, чтобы отметить, что пользователь не является ботом, а затем возвращает один пиксель gif.

URL-адрес разбит, чтобы скрыть его от бота.

Ответ 5

Вот идея:

Большинство ботов не загружают css, javascript и изображения. Они просто анализируют html.

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

Ответ 6

Для каждого сеанса на сервере вы можете определить, был ли пользователь в любой момент нажимать или вводить слишком быстро. После заданного количества повторений установите флаг isRobot в true и сохраните ресурсы в этом сеансе. Обычно вы не говорите пользователю, что он был обнаружен роботом, так как он только начал новый сеанс в этом случае.

Ответ 7

Ну, это действительно для конкретной страницы сайта. Мы не хотим, чтобы бот представлял форму b/c, которая искажает отслеживание. Честно говоря, дружественные боты, Google, Yahoo и т.д. Не являются проблемой, поскольку они обычно не заполняют форму для начала. Если бы мы заподозрили кого-то в том, что он бот, мы можем показать им изображение с капчей или что-то в этом роде... Если они пройдут, они не будут ботом и форма отправит...

Я слышал такие вещи, как создание формы во флеше или создание javascript для отправки, но я бы предпочел не запрещать реальным пользователям использовать сайт, пока я не подозревал, что они были ботом...

Ответ 8

Я думаю, что ваша идея с проверкой идентификатора сеанса уже будет весьма полезна.

Другая идея: вы также можете проверить, загружены ли внедренные ресурсы.

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

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

Ответ 9

Эй, спасибо за все ответы. Я думаю, что комбинация нескольких предложений будет работать хорошо. В основном, элемент скрытой формы, который быстро заполняет форму, и, возможно, идею "ядовитой ссылки". Я думаю, что это будет охватывать большинство. Когда вы говорите о ботах, вы не найдете их всех, поэтому нет смысла думать, что вы... Глупые боты.