Вычисляем плохих ботов

Это ничуть не руководство к действию, а только лишь некоторые мои умозаключения, которые не являются истиной в последней инстанции.
Итак, давайте рассмотрим ситуацию, когда по сайту лазят боты и занимаются там разными неприглядными делами: сканируют, спамят через формы, грабят контент и так далее. Но по сайту могут пройтись и хорошие роботы — с поисковых систем, которых обижать нельзя. Необходимо определить плохих ботов и заблокировать их.

Запретный плод сладок

Хороший бот никогда не полезет туда, где ему запрещено через robots.txt. Этим можно воспользоваться.
Создаем директорию, которую закрываем через robots.txt и делаем невидимую ссылку или ссылку через прозрачную картинку 1×1 пиксель на какую-то страницу в эту директорию.
Человек туда не попадет, а хорошие роботы запрет не нарушат,а плохие — пополнят наш список.

Заполните эту форму

Хороший бот никогда не станет заполнят форму и нажимать кнопку. А вот плохим ботам, типа XRumer, только дай поспамить. А ведь это отличная идея!
Давайте возьмем и поместим на сайт форму-обманку для регистрации или отправки комментария? А выше нее поставим картинку в которой напишем — это ловушка для ботов, если вы отправите эту форму — мы вас забаним.
Таким образом можно отсечь спамботов. И неграмотных, невнимательных посетителей.

Может печеньку?

Хороший бот игнорирует кукисы. Неплохим вариантом будет предложить кукис в запрещенной для ботов директории. Если он ее примет, то на основе этой куки можно попробовать ему подсунуть сайт-ловушку, в которой структура бесконечно вложена и посмотреть — он поймет это или нет.
Если поймет — то осторожно, это умный и хитрый бот. А если не понимает — его можно смело банить на 100-й попытке зайти вглубь сайта.

Хорошие боты javascript не трогают!

Вот черт, получается что Гуглбот — плохой, злой? Ведь он умеет ходить по таким ссылкам и его можно случайно забанить. Нет, это недопустимо! Лучше сделать так — в директорию, запрещенную для роботов, добавим ссылку или даже редирект на javascript. Если бот выполнит и совершит переход/редирект — то это точно очень плохой и злой бот.

Дополнительные меры защиты

Прозрачная картинка на весь экран? Белые буквы на белом фоне? Скрытые поля формы?
Все это поможет определить кто же у нас на сайте — человек или бот. Возможно капча на флеше? Буду рад если предложите свои варианты.

Заключение

Создаем директорию, которая будет закрыта для ботов через robots.txt.
Сделаем две скрытые ссылки на две страницы внутри этой директории, одну обычную и вторую через javascript. Подсовываем кукис.
На страницах мы предложим заполнить форму для регистрации. С сообщением о том, что это приведет к бану. И скрытым полем, лучше всего если это поле для ввода URL сайта.
Если не смотря на все эти меры, форма отправлена и кука присутствует — поздравляю, вы нашли злого, умного и плохого бота!

А еще я советую сразу блокировать все диапазоны разных ЦОД от посещений вашего сайта. Все равно через их IP, выделяемые под арендованные сервера, нормальный посетитель ходить не будет, и эта мера срезает сразу 80% спама через формы.