remote obtain address php security ip-address

php - obtain - ¿Es seguro confiar en $_SERVER[''REMOTE_ADDR'']?



php get ip server (3)

¿Es seguro confiar en $_SERVER[''REMOTE_ADDR''] ? ¿Puede ser sustituido cambiando el encabezado de la solicitud o algo así?

¿Es seguro escribir algo así?

if ($_SERVER[''REMOTE_ADDR''] == ''222.222.222.222'') { // my ip address $grant_all_admin_rights = true; }


Como se mencionó anteriormente, no es absolutamente seguro. Pero eso no significa que no deberías usarlo. Considere combinar esto con algunos otros métodos de autenticación, por ejemplo, verificar los valores de COOKIE.


Si, es seguro. Es la IP de origen de la conexión TCP y no se puede sustituir cambiando un encabezado HTTP.

Es posible que desee preocuparse si está detrás de un proxy inverso, en cuyo caso REMOTE_ADDR siempre será la IP del servidor proxy y la IP del usuario se proporcionará en un encabezado HTTP (como X-Forwarded-For ) Pero para el caso de uso normal, leer REMOTE_ADDR está bien.


$_SERVER[''REMOTE_ADDR''] es la dirección IP en la que entró la conexión TCP. Si bien es técnicamente posible falsificar direcciones IP bidireccionales en Internet (al anunciar rutas ficticias a través de BGP), tales ataques probablemente sean detectados y no estén disponibles para el atacante típico; básicamente, su atacante debe tener control sobre un ISP o operador. No hay ataques de spoofing unidireccionales factibles contra TCP (todavía). Sin embargo, la suplantación de IP bidireccional es trivial en una LAN.

También tenga en cuenta que puede no ser un IPv4, sino una dirección IPv6. Su cheque actual está bien en ese sentido, pero si comprueba que 1.2.3.4 solo ocurre en cualquier lugar dentro de $_SERVER[''REMOTE_ADDR''] , un atacante podría simplemente conectarse desde 2001:1234:5678::1.2.3.4 .

En resumen, para cualquier otra cosa que no sean aplicaciones críticas (bancarias / militares / daños potenciales> 50.000 €), puede utilizar la dirección IP remota si puede excluir a los atacantes en su red local.