Я ищу метод или способ обнаружения клиентов с использованием любого типа прокси-сервера, просматривающего мой веб-сайт. Я использую 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.'); ?>