Tor simplemente repite las solicitudes como un proxy HTTP transparente anónimo, lo que significa que no adjunta encabezados de proxy típicos (como Via
o X-Forwarded-For
), ni modifica de ninguna otra manera las solicitudes o respuestas HTTP (además de ser "cebolla enrutada, encriptada y desencriptada" a través de la red Tor).
En lo que respecta a la identificación de clientes que se conectan a través de la red Tor, el más fácil de detectar dichos clientes en el servidor web es consultar al público Servicio TorDNSEL que publica nodos de salida Tor:
TorDNSEL es una lista de prueba activa, basada en DNS de nodos de salida Tor. Ya que
Tor admite políticas de salida, una lista de salida Tor de un servicio de red es una
Función de su dirección IP y puerto. A diferencia de los DNSxL tradicionales,
los servicios deben proporcionar esa información en sus consultas.
Los DNSEL anteriores rasparon el directorio de la red de Tor para el nodo IP de salida
direcciones, pero este método no puede enumerar los nodos que no anuncian
Su dirección de salida en el directorio. TorDNSEL prueba activamente a través de
estos nodos para proporcionar una lista más precisa.
Esta consulta TorDNSEL se puede automatizar, por ejemplo. en su aplicación web, y el código de ejemplo en muchos lenguajes de programación se puede encontrar en Internet. Por ejemplo, aquí hay un ejemplo de código que demuestra cómo para hacer eso en PHP.
Si va a implementar esta comprobación de Tor en su aplicación web, entonces le recomiendo que cachee los resultados de la consulta localmente durante algún tiempo, es razonable esperar que los nodos de salida no hayan cambiado mientras tanto, no repetir constantemente las mismas consultas. y agrega un retraso adicional a tus respuestas.
Editar para agregar : una forma más de optimizar esta consulta del nodo de salida Tor y evitar el uso de TorDNSEL todo el tiempo es hacer una búsqueda DNS inversa de antemano, e intente compararla con una lista de los principales hosts conocidos del nodo de salida Tor. Esto puede ser bastante efectivo, ya que muchos de los principales hosts de nodos de salida nunca cambian y pueden operar una gran cantidad de nodos de salida, todos con el mismo nombre de rDNS o uno similar. Por ejemplo, podría intentar hacer coincidir los nombres rDNS con su lista usando expresiones regulares, operador de SQL LIKE
o similar. Algunos de los hosts de nodo de salida Tor conocidos (ejemplos reales) coincidirán con estos nombres:
tor[0-9].*
tor-exit*
*.torservers.*
*.torland.is
Esta es la lista que estoy usando. Como puede ver, está lejos de estar completo, pero es un comienzo y siempre puede agregar más entradas a medida que las detecte para seguir un patrón que coincida fácilmente. Como está pensado para optimizar simplemente las consultas, no es necesario que esté completo, pero cada coincidencia acelerará las cosas. Espero que esto ayude!