Программное обнаружение ботов - PullRequest
16 голосов
/ 04 декабря 2008

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

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

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

Ответы [ 9 ]

8 голосов
/ 04 декабря 2008

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

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

8 голосов
/ 04 декабря 2008

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

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

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

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

3 голосов
/ 25 мая 2010

Вот идея:

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

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

2 голосов
/ 04 декабря 2008

Простой тест - это JavaScript:

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

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

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

2 голосов
/ 04 декабря 2008

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

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

1 голос
/ 04 декабря 2008

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

0 голосов
/ 05 декабря 2008

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

0 голосов
/ 04 декабря 2008

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

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

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

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

0 голосов
/ 04 декабря 2008

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

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

...