Foro de elhacker.net

Programación => Desarrollo Web => Mensaje iniciado por: Leguim en 16 Agosto 2020, 00:46 am



Título: [Pregunta]: ¿Este código es eficiente para obtener la IP Pública?
Publicado por: Leguim en 16 Agosto 2020, 00:46 am
Adjunto el código que encontré en otro foro..

Código
  1. if (!empty($_SERVER['HTTP_CLIENT_IP'])) {
  2.    $ip = $_SERVER['HTTP_CLIENT_IP'];
  3. } elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
  4.    $ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
  5. } else {
  6.    $ip = $_SERVER['REMOTE_ADDR'];
  7. }
  8.  

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í?


Título: Re: [Pregunta]: ¿Este código es eficiente para obtener la IP Pública?
Publicado por: Drakaris en 16 Agosto 2020, 13:33 pm
Yo el código lo veo bien... Lo he probado en http://www.writephponline.com/ y me imprime mi ip publica (cliente).
 Cuando dices:
Citar
para 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.


Título: Re: [Pregunta]: ¿Este código es eficiente para obtener la IP Pública?
Publicado por: Leguim en 16 Agosto 2020, 20:03 pm
Hola,

Me refiero a la IP publica del usuario


Título: Re: [Pregunta]: ¿Este código es eficiente para obtener la IP Pública?
Publicado por: @XSStringManolo en 17 Agosto 2020, 00:28 am
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


Título: Re: [Pregunta]: ¿Este código es eficiente para obtener la IP Pública?
Publicado por: #!drvy en 19 Agosto 2020, 08:26 am
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