Как определить, что реальный пользователь просматривает мой сайт или просто сканирует его, либо еще в PHP - PullRequest
4 голосов
/ 08 июля 2011

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

Я знаю, что будут работать два метода.

  1. Javascript.

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

  2. 1 × 1 прозрачного изображения в html.

    Используйте img для обратного вызова сервера.

Кто-нибудь знает ловушку этого метода или какой-либо лучший метод?

Кроме того, я не знаю, как определить фрейм 0 × 0 или 1 × 1, чтобы предотвратить вышеуказанный метод.

Ответы [ 6 ]

5 голосов
/ 08 июля 2011
  1. Бот может получить доступ к браузеру, например, http://browsershots.org

  2. Бот может запросить изображение 1x1.

InКороче говоря, нет реального способа узнать.Лучшее, что вы могли бы сделать, это использовать CAPTCHA, но тогда это ухудшает опыт для людей.

Просто используйте CAPTCHA там, где это необходимо (регистрация пользователя и т. Д.).

1 голос
/ 08 июля 2011

Я согласен с другими здесь, это действительно сложно - как правило, хорошие сканеры идентифицируют себя как сканеры, поэтому использование 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, чтобы проверить, действительно ли указанный пользовательский агент (если это браузер) действительно является этим браузером?

1 голос
/ 08 июля 2011

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

1 голос
/ 08 июля 2011

Я хочу знать, действительно ли пользователь просматривает мой сайт (я знаю, что он просто загружается браузером и отображается для человека, а не для просмотра человеком).путь изображения выглядит лучше, так как обычные пользователи могут отключить Javascript.Роботы обычно не загружают изображения, так что это действительно должно работать.Тем не менее, если вы просто хотите отфильтровать известный набор роботов (скажем, Google и Yahoo), вы можете просто проверить заголовок HTTP User Agent, поскольку эти роботы фактически идентифицируют себя как робота.

0 голосов
/ 08 июля 2011

Проверьте заголовок User-Agent http-запроса.Сканеры должны установить это для любого кроме известного браузера.

вот заголовок google-bot http://code.google.com/intl/nl-NL/web/controlcrawlindex/docs/crawlers.html

В php вы можете получить user-agent с помощью:

$Uagent=$_SERVER['HTTP_USER_AGENT'];

Затем вы просто сравниваете его с известными заголовками, так как подсказка preg_match () может быть полезна для всего этого в нескольких строках кода.

0 голосов
/ 08 июля 2011

"Хорошие" роботы, подобные роботам из Google или Yahoo, обычно уважают файл robots.txt . Также может помочь фильтрация по useragent.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...