Я согласен с другими здесь, это действительно сложно - как правило, хорошие сканеры идентифицируют себя как сканеры, поэтому использование User-Agent является довольно хорошим способом отфильтровать этих парней. Хороший источник для строк пользовательского агента можно найти по адресу http://www.useragentstring.com.. Я использовал php-скрипт Криса Шульда (http://chrisschuld.com/projects/browser-php-detecting-a-users-browser-from-php/) для хорошего эффекта в прошлом.
Вы также можете отфильтровать этих парней на уровне сервера, используя конфигурацию Apache или файл .htaccess, но я обнаружил, что сражение проиграет.
Однако, если вы посмотрите журналы вашего сервера, вы увидите много подозрительных действий с действительными (браузерными) пользовательскими агентами или с фанки пользовательскими агентами, так что пока это будет работать. Вы можете играть в игру с черным / белым списком, но она быстро устареет.
Множество сканеров do загрузка изображений (т. Е. Поиск картинок в Google), поэтому я не думаю, что это будет работать постоянно.
Очень немногие сканеры имеют движки Javascript, так что, вероятно, это хороший способ их дифференцировать. И давайте посмотрим правде в глаза, сколько пользователей на самом деле включить Javascript в эти дни? Я видел статистику об этом, но я думаю, что эта статистика очень искажена из-за огромного количества сканеров / ботов, которые не идентифицируют себя. Однако, предостережение состоит в том, что я видел, что бот Google теперь запускает Javascript.
Итак, суть в том, что это сложно. Я бы точно выбрал гибридную стратегию - если вы будете фильтровать, используя user-agent, изображения, IP и javascript, я уверен, что вы получите большинство ботов, но ожидайте, что некоторые пройдут, несмотря на это.
Другая идея, вы всегда можете использовать известную причуду браузера Javascript, чтобы проверить, действительно ли указанный пользовательский агент (если это браузер) действительно является этим браузером?