2009-05-13 56 views
22

Estoy buscando un método o una forma de detectar clientes utilizando cualquier tipo de servidor proxy para ver mi sitio web. Estoy usando PHP/Apache ... ¿cuál es la mejor manera de hacer esto? Cualquier servidor proxy debería ser detectado, no específicamente uno u otro.Detectar clientes con servidores proxy a través de PHP

Editar

estoy más interesado en los proxies anónimos ... como las normales son fácilmente detectados mediante la búsqueda de HTTP_X_FORWARDED_FOR.

Otra Editar

Prueba esto:

1) ir a http://kproxy.com (o cualquier otro sitio proxy anónimo libre)

2) visita: http://www.worldofwarcraft.com

3) que son capaz de bloquear de alguna manera, ya que la página se equivoca con "Error al cargar la hoja de estilo: se produjo un error de red al cargar una hoja de estilo XSLT: http://kproxy.com/new-hp/layout/layout.xsl"

Quiero hacer algo similar para evitar proxies.

+0

¿Qué intención tienes? ¿Hay alguna desactivación de caché o algo más? – guerda

+0

worldofwarcraft.com se carga bien a través de kproxy.com para mí, solo le faltan las hojas de estilo, lo que probablemente se deba a cómo se hace referencia en el html en lugar de algún bloqueador de proxy. – cOle2

+0

Tenemos la intención de bloquear sitios anónimos para que no permitan a los usuarios ver nuestro sitio web. De alguna manera, como se mencionó anteriormente, Blizzard puede hacer esto utilizando un truco de hoja de estilo. – MichaelICE

Respuesta

15

No puede detectarlo a menos que pasen encabezados especiales que explícitamente lo mencionan como X-Forwarded-For o algo así.

Por lo que sé, tiene que usar una lista negra. Los usuarios que usan putty portforwarding, VPN u otros métodos más sofisticados son indetectables, ya que se comportan exactamente como los usuarios normales.

+0

Sí, ¿hay algún truco que se pueda hacer? ¿Algo que no se pueda almacenar en caché o que pueda reenviar? – MichaelICE

+0

No hay tal truco, usted como desarrollador del lado del servidor no puede ver si me conecto a través de una VPN (sí, esto es un proxy) oa través de mi conexión real a Internet. Los trucos que menciona solo bloquean ciertos proxies anónimos basados ​​en la web, pero no los buenos usando un VPS con puerto de masilla, etc. – TomHastjarjanto

1

Todo lo que el cliente transfiere al servidor se puede configurar por sí mismo. No puedes confiar en nada, excepto en una dirección IP. Por lo tanto, no puede verificar los datos del encabezado, si es un proxy o un cliente normal.
Por cierto: es la intención de un proxy no mostrar ser un proxy :)

Sin duda, podría tomar la dirección IP del solicitante y enviar una solicitud http que enviaría a un proxy. Si reacciona, puede ser un proxy, de lo contrario, es un cliente normal. Este método sería muy costoso y no confiable. Si el proxy que solicitó su servidor estaba detrás de un firewall, no obtendría respuesta y pensaría que es un cliente normal.

+0

Eche un vistazo rápido al ejemplo que edité en "Otra edición". De alguna forma, la ventisca pudo hacer algún truco y engañar al servidor proxy. – MichaelICE

1

Creo que lo que está sucediendo aquí es algo de JavaScript del lado del cliente que está tratando de cargar algo, y que puede "ver" que la página se está viendo dentro de un marco. Esa podría ser una vía más fructífera para explorar, como han indicado otras respuestas, los proxies intencionalmente hacen que sea difícil determinarlo solo desde el servidor.

7

Metasploit utiliza muchas técnicas diferentes para obligar al sistema del cliente a establecer una conexión directa (vulnerabilidades/características incorrectas en Flash, Java, QuickTime, MS Office, servidor DNS personalizado).

Alternativamente, si no puede obtener el navegador del cliente para iniciar metasploit, podría intentar buscar proxies abiertos (escaneo de puertos) y known Tor exit nodes.

Pero no asuma que los proxies son malos y deben bloquearse: hay muchos proxies legítimos y algunos usuarios tienen que usarlos.

Si tiene problemas con el correo no deseado u otro tráfico abusivo, el solo bloqueo de proxies no ayudará mucho. Debe buscar soluciones específicas que aborden el núcleo del problema (filtros de spam, IDS) en lugar de asumir anonymous = guilty.

+5

+1 anonymouse! = Culpable – walrii

-3

Estoy usando lo siguiente, pero no estoy seguro si funciona siempre. Es sólo una idea :)

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

Esto no funcionará para muchos usuarios, porque gethostaddr devuelve la mayor parte del tiempo el nombre de usuario y el nombre del proveedor como: 5ED042DD.dynamic. .com – Codebeat

21

Utilice los siguientes 2 soluciones en PHP. // méthode 1 = rápido, pero no funciona con los proxies anónimos

$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 de nuevo a la IP de origen en los puertos de proxy normales utilizados.

$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!"); 
     } 
    } 
+7

Desaconsejo el uso del segundo método: a menudo devuelve falsos positivos. Hemos tenido problemas con esto en nuestro sitio al utilizar un script de detección de proxy de terceros que usó este método. –

+3

El segundo método, no solo llevará mucho tiempo y no se puede implementar en sitios web con mucho tráfico, sino que también mostrará una alerta antivirus para algunos de los visitantes. –

+0

HTTP_X_FORWARDED_FOR devuelve un postivo falso usando mi conexión directa a internet normal. – Sumedh

1

Tema antiguo, pero podría haber resuelto algo.

Está en vivo en mi sitio y creo que podría funcionar en la mayoría de los casos.

Mi problema era que el usuario bloqueado volvía a mi sitio y volvía a registrarse con una nueva dirección de correo electrónico usando uno de los muchos proxies que puede encontrar. Lo que he hecho es una simple llamada jQuery en el formulario de registro/entrada:

<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> 
+0

Supongo que esto solo detecta proxies que quitan JS del tráfico de red? – sousdev

+1

la mayoría de los proxies reemplazan la URL de la publicación, la ejecución de la JS la pondría en orden normal. Asegúrese de que 'real_login_form' no esté en texto plano, IE:' var url = 'ht' + 'tp:' + '//' + 'sitio' + '. Com' + '/ url'' – Fabrizio

1

Este sitio web muestra este error, ya que tiene en su código fuente de una dirección que apunta a "nueva-hp/diseño/layout.xsl" . Un proxy quiere ocultar su ip, por lo que está cambiando a http://kproxy.com/new-hp/layout/layout.xsl, para apuntar a su servidor, pero el archivo no está realmente existente, por lo que Flash Plugin no puede encontrarlo.

2

Hay varias soluciones de pago/gratis. La mayoría de ellos mira la dirección IP del cliente que intenta conectarse para determinar si están en un proxy o no.

Paid:
Maxmind - Se centran en la detección de fraude y tienen una subcategoría para la detección de proxy. Tenga en cuenta que esto ahora se considera un servicio "heredado".

gratuito:
W I T C H - Capaz de detectar OpenVPN examinado los valores del SMS que son únicamente identificable. El código está disponible en github.

GetIpIntel - Detección de Proxy/VPN mediante aprendizaje automático, consultas vía API.

Hay algunas más opciones gratuitas enumeradas on security stack exchange.

+0

Usted puede buscar "IP2Proxy" en Google. También se pagan soluciones con direcciones IP proxy actualizadas diariamente. –

+0

Acabo de hacer algunas pruebas con IP2Proxy, no es muy preciso. Desde mi experiencia, block/maxmind funciona bien para soluciones pagas, y getIPIntel es la mejor solución gratuita. –

+0

Otro proxy y servicio de detección de VPN que vale la pena agregar a esta lista es IPQualityScore (https://www.ipqualityscore.com/). Tienen planes generosos gratuitos y pagos y la detección de proxy es muy precisa sin marcar las IP como falsos positivos. – Stas

0

Tengo ganas de responder a un hilo de 8 años de edad es inútil, pero voy a responder de todos modos para referencia futura.
No sé acerca de los proxies, pero la mayoría de las VPN (si vas a ellas) traerán algún tipo de página de error. si se hizo algo así como ...

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

esto es muy básico, se puede obtener una matriz de los mensajes de error y de hacerlo de esa manera.
Esto no funcionará si el usuario ha portforwarded su 80 puerto, pero no veo por qué la persona común haría esto.

Cuestiones relacionadas