[Pregunta]: ¿Este código es eficiente para obtener la IP Pública?

Iniciado por Leguim, 16 Agosto 2020, 00:46 AM

0 Miembros y 1 Visitante están viendo este tema.

Leguim

Adjunto el código que encontré en otro foro..

Código (php) [Seleccionar]

if (!empty($_SERVER['HTTP_CLIENT_IP'])) {
   $ip = $_SERVER['HTTP_CLIENT_IP'];
} elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
   $ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
} else {
   $ip = $_SERVER['REMOTE_ADDR'];
}


EDIT: me sale ::1
y en la otra pc me sale 192.168.1.102 pero no me sale la dirección pública que me da en la pagina de "cualesmiip"...

'Por qué el mio no se ve así?

Drakaris

Yo el código lo veo bien... Lo he probado en http://www.writephponline.com/ y me imprime mi ip publica (cliente).
Cuando dices:
Citarpara obtener la IP Pública
A que te refieres? A la IP publica del cliente que hace la peticion o del servidor?

Citar
EDIT: me sale ::1
y en la otra pc me sale 192.168.1.102 pero no me sale la dirección pública que me da en la pagina de "cualesmiip"...

Te sale ip privadas porque estas comprobandolo en la misma red, compruebalo desde la WAN, por ejemplo en http://www.writephponline.com/ ejecuta el codigo. Te tendría que salir la ip publica de tu router.
Lo increible, no es lo que ves, sino como es

Leguim


@XSStringManolo

Cita de: MiguelCanellas en 16 Agosto 2020, 20:03 PM
Hola,

Me refiero a la IP publica del usuario
El código que pones está correcto. Pero lo de siempre, te pueden mandar algo distinto a una ip para hacer HTMLi, xss, comand inyection, request smuggling, response spliting, path traversal, null byte filter bypass...
Asique ten el mismo cuidado que con cualquier dato obtenido de un usuario o fuentes externas:
curl -v -H "X-Forwarded-For: CODIGO_MALICIOSO_AQUÍ_EN_LUGAR_DE_UNA_IP_TE_HACKEARÁ_A_TI_Y_A_TODOS_TUS_USUARIOS" https://example.com

#!drvy

Tanto HTTP_CLIENT_IP como HTTP_X_FORWARDED_FOR son cabeceras que son enviadas por el propio usuario y son modificables a su voluntad. La información que proporcionan solo se debe considerar como "fiable" cuando son proveídos por servicios fiables.

REMOTE_ADDR indica la dirección desde la que se ha solicitado la información. Si el usuario esta detrás de un proxy, REMOTE_ADDR indicará la dirección del servidor de proxy mientras que HTTP_CLIENT_IP o HTTP_X_FORWARDED_FOR puede que indiquen o no la dirección original. Remarcar la palabra puede...  Es a voluntad del servidor de proxy enviar dicha información y normalmente no la envía si se trata de un proxy que se respete.


Hay otro caso en el que se utilizan estas dos últimas cabeceras. Cuando estas detrás de un CDN como el de Cloudflare, si usas REMOTE_ADDR lo más seguro es que te lleguen las peticiones que hacen los servidores de Cloudflare. En tal caso, si es fiable usar HTTP_X_FORWARDED_FOR dado que Cloudflare añade esta cabecera con la IP del usuario.


Lo dicho, si vas a usarlo en seco sin balanceadores de carga ni cdns, te recomiendo usar solamente REMOTE_ADDR y si acaso añadir las otras dos cabeceras como información adicional.


Aquí en la Warzone de Elhacker.net hay/habia precisamente un reto que consiste spoofear el HTTP_X_FORWARDED_FOR.

Saludos