¿Cómo obtener de Cloudflare el IP real de los visitantes en PHP?

Si nuestra web brinda servicios basados en geolocalización, pero decidimos usar Cloudflare para evitar ataques de denegación de servicios, servir contenidos estáticos (archivos javascript, css, imágenes), etc., nos vamos a percatar de que las direcciones IP de los usuarios pertenecen a Cloudflare y el contenido servido basado en la ubicación será erróneo. A continuación veremos cómo obtener de Cloudflare el IP real de los visitantes en PHP.

¿Por qué obtenemos direcciones IP de Cloudflare?

Nuestros servidores ven direcciones IP de Cloudflare debido a que las conexiones de los visitantes primero pasan por el proxy de Cloudflare antes de llegar a nuestra web. Por suerte existe una solución sencilla.

¿Cómo obtener de Cloudflare el IP real de los visitantes en PHP?

La buena noticia es que Cloudflare añade una cabecera http que permite obtener el IP real del cliente que inicio la conexión y con PHP es muy fácil:

[pastacode lang=”php” manual=”if(isset(%24_SERVER%5B’HTTP_CF_CONNECTING_IP’%5D))%0A%7B%0A%20%24ip%20%3D%20%24_SERVER%5B’HTTP_CF_CONNECTING_IP’%5D%3B%0A%7D%0Aelse%20%7B%0A%20%24ip%3D%24_SERVER%5B’REMOTE_ADDR’%5D%3B%0A%7D%0A” message=”Obtener de Cloudflare el IP real de los visitantes en PHP ” highlight=”” provider=”manual”/]

También puedes sobrescribir la variable de entorno REMOTE_ADDR en algún punto anterior a donde necesitas el IP real del visitante:

[pastacode lang=”php” manual=”if(isset(%24_SERVER%5B%22HTTP_CF_CONNECTING_IP%22%5D))%0A%7B%0A%20%24_SERVER%5B’REMOTE_ADDR’%5D%20%3D%20%24_SERVER%5B’HTTP_CF_CONNECTING_IP’%5D%3B%0A%7D%0A” message=”Obtener de Cloudflare el IP real de los visitantes en PHP” highlight=”” provider=”manual”/]

Cloudflare añade otras cabeceras para geolocalización y ofrece además una solución para nginx y apache con mod_cloudflare. Aquí dejo los enlaces si desean profundizar más.

https://support.cloudflare.com/hc/en-us/articles/200168236-What-does-Cloudflare-IP-Geolocation-do-

https://support.cloudflare.com/hc/en-us/articles/200170986-How-does-Cloudflare-handle-HTTP-Request-headers-

https://support.cloudflare.com/hc/en-us/articles/203656534-How-do-I-restore-original-visitor-IP-with-Apache-2-4-

https://support.cloudflare.com/hc/en-us/articles/200170916-Why-should-I-install-mod-cloudflare-

https://support.cloudflare.com/hc/en-us/articles/200170706-How-do-I-restore-original-visitor-IP-with-Nginx-

 

 

 

Leave a Reply

Your email address will not be published. Required fields are marked *