PHP IP check as security?

4

Solo me gustaría algo de entrada en un script PHP que estoy escribiendo. Es solo un simple script al que solo yo mismo debería poder acceder. No tengo una dirección IP dinámica, por lo que no es un problema para mí, pero me pregunto si hay algún problema potencial en mi medida de "seguridad".

Actualmente mi script está configurado de esta manera:

$uip = $_SERVER['REMOTE_ADDR'];
if ($uip == "my personal ip here")
 {
   echo "access granted";
 }

else
 {
   echo "access denied";
 }

¿Esto es "seguro"? ¿O es fácil para alguien que sabe mi IP poder falsear su visita al script PHP usando mi IP y engañar al script para que piense que es mi IP?

¿Alguna sugerencia? No quiero complicar demasiado las cosas (por ejemplo, una página de inicio de sesión) y solo quiero saber si mi solución KISS es viable o potencialmente problemática.

    
pregunta user46995 21.05.2014 - 10:19
fuente

3 respuestas

6

El mayor riesgo con esta configuración es falsificación de solicitudes entre sitios (CSRF). Como ejemplo, las imágenes de un sitio tienen una URL como enlace que establece el título del sitio. Solo desea que el administrador acceda a esto, no a nadie más, y use los controles de dirección IP para imponerlo. Ahora imagínese si el administrador está navegando por un sitio no relacionado, y eso incluye una etiqueta de imagen que enlaza con esta URL, por ejemplo. enlace Lo que sucederá es que el navegador de administración intentará cargar ese enlace. El servidor web verá que la solicitud proviene de la dirección IP autorizada y permitirá que se cambie el título. ¡No está bien! La solución habitual para CSRF es emitir un token aleatorio para los usuarios, que debe incluirse en la solicitud.

¿Quién más usa tu dirección IP? La mayoría de las configuraciones domésticas tienen un número de personas que acceden a Internet a través del mismo enrutador y, por lo tanto, a la misma dirección IP. Es posible que no desee que estas otras personas tengan acceso.

El riesgo de falsificación de direcciones IP es un problema menor. TCP tiene una protección razonable contra esto, lo que detiene muchos ataques. Todavía es posible en ciertas circunstancias, pero si solo buscas algo simple, no me preocuparía demasiado por ello.

    
respondido por el paj28 21.05.2014 - 10:52
fuente
1

Desafortunadamente, no creo que este sea un enfoque muy seguro. Hay varias razones por las que:

  1. NAT en su red local
  2. NAT en su ISP (NAT de nivel de operador)
  3. Proxies en cualquier lugar entre su navegador y su servidor web
  4. Equilibradores de carga frente a su servidor web

Cualquiera de estos puede ocasionar que múltiples dispositivos accedan a tu página para compartir la misma dirección IP.

En caso de que no esté familiarizado: Traducción de direcciones de red (NAT) permite que múltiples sistemas en una red accedan a Internet desde la misma dirección IP pública. Esto es necesario porque hay muchos más sistemas que acceden a Internet que las direcciones IPv4 públicas disponibles.

La mayoría de los hogares ejecutan un enrutador que realiza NAT para ellos, lo que significa que cualquier sistema que se conecte a Internet (por ejemplo, su computadora de escritorio, computadora portátil, tableta, teléfono, televisión) provendrá de la misma dirección IP. Eso también significa que cualquiera de estos sistemas puede acceder a su página web y será autenticado.

Se pone peor que eso. Su ISP podría estar ejecutando NAT de nivel de operador (CGN) , lo que significa que un montón de hogares compartirán el Dirección IP como usted. Eso significa que cualquiera de ellos podría acceder a su página web y será autenticado.

Luego hay proxies. Si su navegador envía tráfico a través de un proxy (como uno alojado por su ISP), o si su sitio web se encuentra frente a una red de distribución de contenido ( CDN) , lo más probable es que obtenga la dirección IP del proxy o nodo de borde CDN, en lugar de la dirección IP de su computadora.

Finalmente, si su servidor web tiene un equilibrador de carga frente a su servidor web, entonces puede terminar con la dirección IP del equilibrador de carga.

Por todos estos motivos, definitivamente no recomendaría un mecanismo de inicio de sesión que se base únicamente en la dirección IP del usuario que accede a su página web.

Si no desea escribir el código para autenticarse, le recomendamos que consulte algunas bibliotecas de terceros para hacerlo, aunque asegúrese de revisar el código antes de implementarlo en su página web.

En lo que respecta a la falsificación de IP

Otros han mencionado el riesgo de suplantación de la propiedad intelectual, que en teoría parece fácil, pero (incluso en una forma simplificada) requeriría dos pasos diferentes:

  1. Cambie la dirección IP en el encabezado del datagrama IP
  2. Intercepte la respuesta del servidor para leer los resultados

El primer bit no es difícil por sí mismo. La dificultad es que el servidor enviará la respuesta a la IP falsificada, en lugar de a la IP de los atacantes. Para leer la respuesta, el atacante por lo tanto necesitaría interceptar la respuesta al usuario. Esto generalmente sería bastante difícil.

    
respondido por el James Lambeth 22.05.2014 - 06:56
fuente
0

Básicamente respondiste tu propia pregunta. No, no es seguro si se usa como la única medida de seguridad.

Una IP es pública, y una IP puede ser falsificada, por lo que las personas pueden acceder fácilmente al material falsificando su IP.

Realmente sugiero una página de inicio de sesión como capa principal de seguridad. Aquí es un sitio web que tiene un tutorial simple y efectivo sobre cómo para hacer un script de inicio de sesión. Es algo realmente bueno saberlo, o al menos entenderlo.

    
respondido por el Lighty 21.05.2014 - 10:35
fuente

Lea otras preguntas en las etiquetas