determinar si el usuario está usando proxy

Hola, estoy creando un juego y me gustaría poder decir si un usuario está usando un proxy. Si lo son, básicamente pone una bandera en su cuenta. Puedo hacer que marque la bandera y todo, pero no estoy seguro de cómo saber si un usuario está usando un proxy. He visto que puedes usar encabezados, pero no estoy seguro de qué buscar y cómo verificar si un usuario “tiene” un encabezado (además del http_referrer normal y lo que no).

Cualquier ayuda es muy apreciada.

Editar

if ( $_SERVER['HTTP_X_FORWARDED_FOR'] || $_SERVER['HTTP_X_FORWARDED'] || $_SERVER['HTTP_FORWARDED_FOR'] || $_SERVER['HTTP_CLIENT_IP'] || $_SERVER['HTTP_VIA'] || in_array($_SERVER['REMOTE_PORT'], array(8080,80,6588,8000,3128,553,554)) || @fsockopen($_SERVER['REMOTE_ADDR'], 80, $errno, $errstr, 30)) { exit('Proxy detected'); } 

Por lo tanto, este código funciona principalmente, cuando el usuario es un proxy, sale rápidamente. Pero cuando no lo son, tarda una eternidad en cargarse (unos 10 segundos). ¿Hay alguna forma de usar este script pero hacerlo funcionar más rápido?

EDIT 2

Cambió el tiempo de espera en fsockopen de 30 a 1 y funciona mucho más rápido y aún funciona. Gracias a todos por las sugerencias 🙂

Después de buscar en Google php detect http proxies me ocurrió lo siguiente:

http://forums.digitalpoint.com/showthread.php?t=58964

http://forums.digitalpoint.com/showthread.php?t=365467

http://www.roscripts.com/PHP_Proxy_Detector-75.html

… y un buen número de otros éxitos interesantes.

EDITAR:

AFAIK no hay manera de detectar proxys HTTP con absoluta certeza o seguridad:

  • Los servicios de anonimato no agregan los encabezados adecuados a sus solicitudes; de hecho, eliminan algunos de ellos. Debe mantener una lista de los servicios de anonimato más populares y sus bloques de direcciones IP y detectarlos de esa manera. Hay algunas listas en línea que podría usar, pero están lejos de ser completas, especialmente si considera que la mayoría de las grandes instituciones (ISP, empresas, universidades, etc.) proporcionan un servidor proxy para sus usuarios. Algunos incluso requieren que sus usuarios los usen.

  • Muchos proxies HTTP están configurados para que simplemente reenvíen las solicitudes sin alterar los encabezados.

  • Las instalaciones VPN tienen el mismo efecto que un proxy HTTP, es decir, permitir que las solicitudes HTTP se originen desde una IP diferente a la de la computadora donde está el broswer web, sin ser una.

  • Cualquier servidor SSH puede ser utilizado como un proxy SOCKS por sus usuarios, que en realidad no es detectable ya que no es realmente un proxy HTTP.

  • Hay muchos proxies HTTP legítimos que no son públicamente accesibles. Por ejemplo, hay productos proxy HTTP que se instalan en una red doméstica y proporcionan control parental y contenido cuestionable (pornografía, sitios de phishing, etc.) que filtran para toda la red.

¿Qué tipo de abuso está viendo, donde la detección de proxies HTTP podría ser útil?