2010-03-21 3 views
4

Я пошел на собеседование на PHP, меня попросили внедрить фрагмент кода, чтобы обнаружить, что посетители - это боты, которые сканируют сайт и крадут контент.PHP-переменная приложения ... может быть?

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

Мне сказали, что сеансы varaibles могут быть manupilated с помощью файлов cookie и т. Д., Поэтому мне интересно, есть ли переменная приложения, которую я могу использовать для хранения информации о метке времени от IP-адресов посетителя, например $ _SERVER [REMOTE_ADDR]?

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

С уважением

Джеймс

+2

Возможно, мне что-то не хватает, но смысл вашего названия ускользает от меня. –

ответ

4

мне сказали, что сессия varaibles может быть manupilated печенья и т.д.,

Просто чтобы быть ясно, клиенты не могут изменить переменные сессии по своему вкусу. Однако они могут удалить или изменить PHPSESSID, который предоставляет другой сеанс. Глобальные переменные (то есть $_SERVER) не являются постоянными, поэтому любые изменения, которые вы им делаете, не будут попадать на загрузку следующей страницы.

Лучший способ обнаружения искателей - хранить IP-адрес, пользовательский агент и метку времени всех загрузок страниц в базе данных. Накладные расходы незначительны.

+0

Я * считаю, что сеанс может быть взломан, если идентификатор сеанса не указан в URL-адресе –

+0

Но клиенты не могут принимать файлы cookie, препятствуя использованию сеансов на основе файлов cookie. Однако сеансы на основе IP должны быть немного более надежными. –

+0

Клиенты * выбирают * отправлять или не отправлять файлы cookie и файлы cookie для отправки. В этом-то и дело. – cletus

1

Одним словом, нет. Вашими параметрами являются файлы cookie, сеансовые вары (например, файлы cookie на стороне сервера) и хранилище (файл/db).

+1

сеанс vars/cookie на стороне сервера ?? Как идентифицируется пользователь? (чтобы сервер знал, какая сессия загружается). В этом весь смысл файлов cookie на стороне клиента. – mpen

0

Боты могут игнорировать сохранение данных cookie (как в случае отсутствия передачи переменной сеанса). Лучшим вариантом было бы использовать какую-то внешнюю БД или систему хранения. Подобно программе сокетов C++, которая просто хранит IP и сравнивает последние соединения.

1

Ваш лучший выбор для этого может быть после-факта анализа журналов. Это не остановит кражу контента на лету, но будет намного проще найти шаблоны злоупотреблений и заблокировать эти IP-адреса от будущих доступов.

1

Вам понадобится хранить IP-адрес и временную метку на стороне сервера. Маловероятно, что бот отправит файлы cookie, и даже сеанс на основе URL-адресов не является надежным.

Накладные расходы на файл не должны быть слишком большими, если только вы просто не выполняете запись в плоском файле, которая убьет вас. Вы можете использовать SQLite или аналогичный, возможно, хранящийся в файловой системе на основе памяти для небольшого повышения скорости. Или вы можете пойти с чем-то вроде memcached. Если вам нужно сохранить данные, используйте MySQL. Накладные расходы на полномасштабную базу данных практически ничто по сравнению с тем временем, когда PHP делает практически что угодно.

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

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

Что касается утверждения о том, что переменные сеанса могут обрабатываться с помощью файлов cookie, это не совсем так. Однако, если вы достаточно глупы, чтобы оставить register_globals, и вы запрашиваете глобальную переменную, мне не хотелось бы опасаться, что это произойдет из сеанса, файла cookie, строки запроса, среды или ранее не определено. Это все спорно, если вы явно получить доступ через $ _SESSION конечно.

0

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

Я бы посмотрел больше на ip-адреса, которые загружают только html-документ, и игнорируют такие вещи, как favicon, CSS-таблицы стилей и т. Д. Если вы установите css-файлы для анализа php, вы можете добавить туда некоторую логику, чтобы сказать, что ip выглядит законны. Просто будьте осторожны с кешированием.

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

Смежные вопросы