Подтвердить что ты не робот

Обнаружение клиентов с помощью прокси-серверов через PHP

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

Я хочу сделать что-то подобное, чтобы предотвратить прокси.

4b9b3361

Ответ 1

Вы не можете обнаружить это, если они не передают специальные заголовки, которые явно упоминают его как X-Forwarded-For или что-то в этом роде.

Насколько я знаю, вы должны использовать черный список. Пользователи, которые используют штепсельное портфолио, VPN или другие более сложные методы, не поддаются рассмотрению, поскольку они ведут себя точно так же, как и обычные пользователи.

Ответ 2

Используйте следующие 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!");
    }

//Метод 2 = порты возвращаются к исходному 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!");
         }
     }

Ответ 3

Metasploit использует множество разных методов, чтобы заставить клиентскую систему осуществлять прямое подключение (уязвимости/ошибки в Flash, Java, QuickTime, MS Office, пользовательский DNS-сервер).

В качестве альтернативы, если вы не можете заставить браузер клиента запускать metasploit, вы можете попытаться найти открытые прокси (сканирование портов) и известные узлы Tor exit.

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

Если у вас есть проблемы со спамом или другим оскорбительным трафиком, просто блокировка прокси-серверов не поможет. Вы должны искать конкретные решения, которые затрагивают ядро ​​проблемы (спам-фильтры, IDS), а не предполагать анонимный = виновный.

Ответ 4

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

Оплачено:
Maxmind - Они сосредоточены на обнаружении мошенничества и имеют подкатегорию для определения прокси. Обратите внимание, что это теперь рассматривается как "устаревшее" обслуживание.

Free:
W я T C H - Возможность обнаружения OpenVPN путем просмотра значений MSS, которые однозначно идентифицируются. Код доступен в github.

GetIpIntel - обнаружение прокси /VPN с использованием машинного обучения, запросов через API.

В разделе обмена стеками безопасности есть еще несколько бесплатных опций .

Ответ 5

Все, что клиент передает серверу, может быть самонастраиваемым. Вы ничего не можете доверять, кроме IP-адреса. Таким образом, вы не можете проверить данные заголовка, если это прокси или обычный клиент.
Кстати: это намерение прокси-сервера не показывать прокси:)

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

Ответ 6

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

Ответ 7

Старая тема, но я мог бы что-то придумать.

Он живет на моем сайте, и я думаю, что он может работать в большинстве случаев.

Моя проблема заключалась в том, что запрещенный пользователь возвращался на мой сайт и перерегистрировался с новым адресом электронной почты, используя один из многих прокси, которые вы можете найти. То, что я сделал, это простой вызов 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>

Ответ 8

Этот сайт показывает эту ошибку, потому что в своем исходном коде есть адрес, указывающий на "new-hp/layout/layout.xsl". Прокси хочет скрыть свой ip, поэтому он меняет его на http://kproxy.com/new-hp/layout/layout.xsl, чтобы указать на их сервер, но файл на самом деле не существует, поэтому Flash Plugin не может найти его.

Ответ 9

Даже если это старый вопрос, мне пришлось проверить прокси, и, к сожалению, ни один из ответов не дал хорошего результата.

После поиска я нашел лучший метод. Чтобы понять этот способ, просто создайте небольшую страницу с этим кодом:

 <?php
 foreach ($_SERVER as $key => $val)
 {
     echo $key."<br>\n";  
 }
 ?>

Запустите его прямо с вашего сервера. Вы увидите все ключи из заголовка, который отправляет ваш сервер. Затем запустите тот же скрипт через прокси. Вы увидите (в зависимости от прокси) 3 возможных результата:

  1. Прокси добавить новости ключи/значения
  2. Прокси не отправляет все оригинальные ключи/значения, поэтому некоторые из них отсутствуют.
  3. Прокси отправляет точно такие же ключи/значения, но не в том же порядке
  4. Прокси отправляет точно такие же ключи/значения, в том же порядке

4-й случай может случиться, но другие являются наиболее частыми. Так что вам просто нужно создать массив с ключом/значением на вашем сервере (на основе результата, когда вы запускаете скрипт без прокси) и сравнить ключи/значения из $ _SERVER. Если у вас нет точно таких же ключей/значений (меньше, больше или в другом порядке), вы можете предположить, что страница получена от Прокси.

Заметьте, я согласен с тем, что в некоторых случаях прокси можно использовать в "легальном".

Ответ 10

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

$cont = file_get_contents($_SERVER["REMOTE_ADDR"]); //the users ip
$errormsg = "nginx";
if(strpos($cont, $errormsg)){
    die("No VPN or Proxies Allowed");
}

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

Ответ 11

Я использую следующее, но я не уверен, что он работает каждый раз. Это просто идея:)

<?php
$host = gethostbyaddr($_SERVER['REMOTE_ADDR']);
if ($host != $_SERVER['REMOTE_ADDR']) die('Proxy detected.');
?>