Фильтрация анонимайзеров и прокси-серверов для сайтов
Часто люди спрашивают - как остановить поток спама или массовых регистраций, как защитить сайт от сканирования, от ботов, ворующих контент и т.д. Нередко на сайт ставят сомнительные расширения, которые должны помочь в решении этого вопроса, но на деле оказываются малоэффективными.
Прежде, чем ставить какую либо защиту, следует понимать, как работают такого рода программы. Ввиду того, что практически все боты используют прокси-сервера, я написал небольшой скрипт для защиты.
Принцип довольно прост. Внутри скрипта находится класс, содержащий три основных метода проверки. Первый метод проверяет значение $_SERVER['HTTP_VIA']. Если клиент пришел с прокси-сервера, то в переменной $_SERVER['HTTP_VIA'] может храниться имя, версия программного обеспечения и номер порта.
Нужно сказать, что любые данные, получаемые от клиента, можно подделать. Поэтому второй метод делает запрос на порт, пытаясь получить ответ. Этот метод позволяет более точно идентифицировать прокси.
Третий метод проверяет IP-адрес клиента по популярным черным спискам DNSBL. В совокупности эти три метода могут помочь отсеять много ненужного трафика.
Владелец сайта сам может задавать, что делать с клиентом, который идентифицируется как прокси. Пока я установил принудительную задержку выполнения скрипта.
Данный скрипт должен вызываться до того, как сайт получит управление. Самым оптимальным вариантом является использование директивы auto_prepend_file в php.ini (либо в .htaccess, если сервер Apache). Можно и напрямую подключить в index.php с помощью include_once (затрется при обновлении).
Хотелось бы сразу сказать, что данный скрипт - не панацея. И тем более это только первая версия. Я мог где то допустить ошибку, что то упустить, поэтому ожидаю, в первую очередь, критики и дельных советов по улучшению. Если данный скрипт окажется полезным, оформлю его в виде плагина для Joomla.
Я не стал пока внедрять в него капчу, которую планировал показывать клиенту, пришедшему с прокси, а ограничился лишь паузой. На данном этапе я не могу гарантировать стопроцентное обнаружение всех прокси, поэтому оставил пока капчу до лучших времен.