¿Podemos falsificar $ _SERVER / user ip con php cURL?

Pues el título básicamente lo dice.

Pero para más información. .

Este método funciona pero. .

$ip = '1.1.1.1'; curl_setopt($handle, CURLOPT_HTTPHEADER, array("REMOTE_ADDR: $ip", "X_FORWARDED_FOR: $ip")); 

Solo agrega estas dos keys en la matriz $_SERVER

  • HTTP_REMOTE_ADDR
  • HTTP_X_FORWARDED_FOR

La clave REMOTE_ADDR sigue siendo la misma.

¿ REMOTE_ADDR puede cambiar REMOTE_ADDR ? La respuesta aquí dice NO . Pero un comentario también dice que puede, sin embargo, NO ser la dirección IP real del usuario porque puede estar oculta por proxies y otros métodos. Es por eso que la regla general es no depender de $_SERVER['REMOTE_ADDR'] para una característica de seguridad.

Con todo eso a un lado, ¿hay un método php curl para ocultar / enmascarar / cambiar la ip? (Cualquier otro método php aparte del código anterior haría).

Y

¿Hay una manera de contrarrestar el método O hay una manera de obtener la IP REAL REAL de un usuario?

¡Aclamaciones!

No. $_SERVER['REMOTE_ADDR'] es la dirección IP física real que el cliente usó para conectarse al servidor web, según lo confirmó un protocolo de enlace TCP de tres vías. No hay forma de falsificar esto configurando encabezados HTTP simples. Tampoco puede hacer que el servidor web / PHP sobrescriba este valor con otra cosa de ninguna manera. $_SERVER['REMOTE_ADDR'] se establece a partir de la información de la conexión TCP, punto.

Para falsificar realmente una dirección IP, tiene que ir mucho más profundo en la capa de red real y tener cierto nivel de control sobre el equipo de red en las posiciones intermedias / proxies / lo que sea para poder establecer una conexión TCP desde una dirección IP Aparte de la que lo está estableciendo.

¿Hay una manera de contrarrestar el método O hay una manera de obtener la IP REAL REAL de un usuario?

No. “La dirección IP real del usuario” es la dirección desde la cual su servidor web recibió la conexión, punto. No hay otra dirección para ti. El cliente se conecta a su servidor desde una determinada IP, esto se confirma con un protocolo de enlace TCP de tres vías, esa es la única dirección que conoce para este cliente. Este cliente puede ser un proxy o un enrutador NAT (es decir, un proxy) o alguna otra cosa, simplemente no lo sabe y tampoco debería hacer ninguna diferencia para usted.

Si el cliente utiliza un navegador detrás de un proxy, $_SERVER['REMOTE_ADDR'] será la dirección IP del proxy. La dirección remota es la IP de la máquina que está haciendo la conexión.

Si el proxy usa encabezados para indicar si la conexión se realiza en nombre de otras máquinas, puede usar estos encabezados para determinar la IP del navegador detrás del proxy.

  • Algunos de estos encabezados HTTP se convierten en variables de entorno como $_SERVER['HTTP_X_FORWARDED_FOR'] , $_SERVER['HTTP_X_FORWARDED'] , $_SERVER['HTTP_FORWARDED_FOR'] y $_SERVER['HTTP_FORWARDED']
  • Puede verificar si algunas de estas variables han sido definidas por el servidor y (intentar) determinar la IP del navegador detrás del proxy.

Tenga en cuenta que el RFC 6648 ha dejado en desuso los encabezados X-* y el RFC 7239 ha desaprobado X-Forwarded-* al definir un encabezado Forwarded .

Puedes consultar algunas respuestas en

  • Obtenga la dirección IP del cliente usando PHP
  • ¿Qué es una especificación completa del encabezado HTTP X-Forwarded-Proto?