Я ищу метод или способ обнаружения клиентов с использованием любого типа прокси-сервера, просматривающего мой веб-сайт. Я использую PHP / Apache … что лучший способ сделать это? Любой прокси-сервер должен быть обнаружен, а не тот или иной.
редактировать
Меня больше интересуют анонимные прокси … так как нормальные легко обнаруживаются при поиске HTTP_X_FORWARDED_FOR
.
Другое редактирование
Попробуй это:
1) перейдите на http://kproxy.com (или любой другой бесплатный анонимный прокси-сайт)
2) посещение: http://www.worldofwarcraft.com
3) они могут каким-то образом заблокировать, поскольку ошибки страницы с «Ошибка загрузки таблицы ошибок: произошла сетевая ошибка, загрузив таблицу стилей XSLT: http://kproxy.com/new-hp/layout/layout.xsl "
Я хочу сделать что-то подобное для предотвращения прокси.
Вы не можете обнаружить это, если они не передают специальные заголовки, которые явно упоминают его как X-Forwarded-For или что-то в этом роде.
Насколько я знаю, вы должны использовать черный список. Пользователи, которые используют шорт-портфолио, VPN или другие более сложные методы, не поддаются проверке, поскольку они ведут себя точно так же, как и обычные пользователи.
Используйте следующие 2 решения в PHP. // метод 1 = быстрый, но не работает с анонимными прокси
$proxy_headers = array( 'HTTP_VIA', 'HTTP_X_FORWARDED_FOR', 'HTTP_FORWARDED_FOR', 'HTTP_X_FORWARDED', 'HTTP_FORWARDED', 'HTTP_CLIENT_IP', 'HTTP_FORWARDED_FOR_IP', 'VIA', 'X_FORWARDED_FOR', 'FORWARDED_FOR', 'X_FORWARDED', 'FORWARDED', 'CLIENT_IP', 'FORWARDED_FOR_IP', 'HTTP_PROXY_CONNECTION' ); foreach($proxy_headers as $x){ if (isset($_SERVER[$x])) die("You are using a proxy!"); }
// Methode 2 = portscan возвращается к исходному IP-адресу на обычных портах прокси-сервера.
$ports = array(8080,80,81,1080,6588,8000,3128,553,554,4480); foreach($ports as $port) { if (@fsockopen($_SERVER['REMOTE_ADDR'], $port, $errno, $errstr, 30)) { die("You are using a proxy!"); } }
Metasploit использует множество разных методов, чтобы заставить клиентскую систему осуществлять прямое подключение (уязвимости / ошибки в Flash, Java, QuickTime, MS Office, настраиваемый DNS-сервер).
В качестве альтернативы, если вы не можете заставить браузер клиента запускать metasploit, вы можете попытаться найти открытые прокси (сканирование портов) и известные узлы выхода Tor .
Но, пожалуйста, не предполагайте, что прокси-серверы злы и их нужно заблокировать – существует множество законных доверенных лиц, и некоторые пользователи должны их использовать.
Если у вас возникли проблемы со спамом или другим оскорбительным трафиком, то просто блокирование прокси не сильно поможет. Вы должны искать конкретные решения, которые определяют суть проблемы (спам-фильтры, IDS), а не предполагать анонимность = виновны.
Существуют различные платные / бесплатные решения. Большинство из них обращается к IP-адресу клиента, пытающемуся подключиться, чтобы определить, находятся ли они в прокси или нет.
Выплачено:
Maxmind – они сосредоточены на обнаружении мошенничества и имеют подкатегорию для обнаружения прокси. Обратите внимание, что теперь это считается «устаревшим» сервисом.
Свободно:
WITCH – Возможность обнаружения OpenVPN, просматривая значения MSS, которые однозначно идентифицируются. Код доступен на github.
GetIpIntel – определение прокси / VPN с использованием машинного обучения, запросов через API.
Есть еще несколько бесплатных опций, перечисленных в обмене стека безопасности .
Все, что клиент передает серверу, может быть самонастраиваемым. Вы ничего не можете доверять, кроме IP-адреса. Поэтому вы не можете проверить данные заголовка, если это прокси или обычный клиент.
Кстати: это намерение прокси не показывать себе прокси 🙂
Конечно, вы можете взять IP-адрес респондера и отправить HTTP-запрос, который вы отправите прокси. Если он реагирует, это может быть прокси в противном случае, это обычный клиент. Этот метод был бы очень дорогим и ненадежным. Если прокси, запрошенный вашим сервером, находился за брандмауэром, вы не получили бы ответа и подумали бы, что это обычный клиент.
Я думаю, что то, что здесь происходит, – это какой-то клиентский JavaScript, который пытается что-то загрузить, и может «видеть», что страница просматривается внутри фрейма. Это может быть более плодотворным средством для изучения – как указывали другие ответы, прокси намеренно затрудняют определение только с сервера.
Старая тема, но я мог бы что-то придумать.
Он живет на моем сайте, и я думаю, что он может работать в большинстве случаев.
Моя проблема заключалась в том, что запрещенный пользователь возвращался на мой сайт и перерегистрировался с новым адресом электронной почты, используя один из многих прокси, которые вы можете найти. То, что я сделал, это простой вызов jQuery в форме регистрации / регистрации:
<form id="login_form" method="post" action="/#fake_login_url"> stuff you need for the form </form> <script> $('#login_form').attr('action','real_login_form'); </script>
Этот веб-сайт показывает эту ошибку, потому что в ее исходном коде есть адрес, указывающий на «new-hp / layout / layout.xsl». Прокси хочет скрыть свой ip, поэтому он меняет его на http://kproxy.com/new-hp/layout/layout.xsl , указывая на свой сервер, но файл на самом деле не существует, поэтому Flash-плагин может Не находите.
я чувствую, что ответить на 8-летнюю нить бесполезно, но я буду отвечать в любом случае для дальнейшего использования.
Я не знаю про прокси, но большинство VPN (если вы их переходите) принесут какую-то страницу ошибок. если вы сделали что-то вроде …
$cont = file_get_contents($_SERVER["REMOTE_ADDR"]); //the users ip $errormsg = "nginx"; if(strpos($cont, $errormsg)){ die("No VPN's or Proxies Allowed"); }
это очень просто, вы можете получить массив сообщений об ошибках и сделать это таким образом.
Это не сработает, если у пользователя есть portforwarded их порт 80, но я не понимаю, почему обычный человек сделает это.
Я использую следующее, но я не уверен, что он работает каждый раз. Это просто идея 🙂
<?php $host = gethostbyaddr($_SERVER['REMOTE_ADDR']); if ($host != $_SERVER['REMOTE_ADDR']) die('Proxy detected.'); ?>