En otras palabras, ¿cómo puedo saber si la persona que usa mi aplicación web está en el servidor en el que reside? Si mal no recuerdo, PHPMyAdmin hace algo como esto por razones de seguridad.
99
También puede utilizar $_SERVER['REMOTE_ADDR']
la dirección IP del cliente que la solicita el servidor web.
$whitelist = array(
'127.0.0.1',
'::1'
);
if(!in_array($_SERVER['REMOTE_ADDR'], $whitelist)){
// not valid
}
Host: 127.0.0.1
y se completaráHTTP_HOST
, por lo que no es un método confiable en absoluto.$whitelist = array('127.0.0.1', '::1');
Como complemento, como función ...
fuente
Los usuarios de sistemas operativos más nuevos (Win 7, 8) también pueden encontrar necesario incluir una dirección remota con formato IPV6 en su matriz de lista blanca:
fuente
$_SERVER["REMOTE_ADDR"]
debería decirle la IP del usuario. Sin embargo, es falso.Consulte esta pregunta sobre recompensas para una discusión muy detallada.
Creo que lo que recuerdas con PHPMyAdmin es algo diferente: muchos servidores MySQL están configurados para que solo se pueda acceder a ellos desde localhost por razones de seguridad.
fuente
Lo siento, pero todas estas respuestas me parecen terribles. Sugeriría reformular la pregunta porque, en cierto sentido, todas las máquinas son "localhost".
La pregunta debería ser; ¿Cómo ejecuto diferentes rutas de código según la máquina en la que se ejecuta?
En mi opinión, la forma más fácil es crear un archivo llamado DEVMACHINE o lo que realmente quieras y luego simplemente verificar
¡Recuerde excluir este archivo cuando lo cargue en el entorno de alojamiento en vivo!
Esta solución no depende de la configuración de la red, no se puede falsificar y facilita el cambio entre ejecutar "live-code" y "dev-code".
fuente
No parece que debas usar
$_SERVER['HTTP_HOST']
, porque este es el valor en el encabezado http, fácilmente falsificado.También puede usar
$_SERVER["REMOTE_ADDR"]
, este es el valor más seguro, pero también es posible falsificar. Estaremote_addr
es la dirección a la que Apache devuelve el resultado.fuente
REMOTE_ADDR
es posible falsificar, sin embargo, si desea falsificarlo como127.0.0.1
o::1
, eso requiere comprometer la máquina, en lo que una falsificaciónREMOTE_ADDR
es la menor de sus preocupaciones. Respuesta relevante - stackoverflow.com/a/5092951/3774582Si desea tener una lista blanca / lista de permitidos que admita IP estáticas y nombres dinámicos .
Por ejemplo:
De esta manera, podría establecer una lista de nombres / IP que podrán (seguro) ser detectados. Los nombres dinámicos agregan más flexibilidad para acceder desde diferentes puntos.
Tiene dos opciones comunes aquí, puede establecer un nombre en su archivo de hosts local o simplemente puede usar un proveedor de nombre dinámico que se puede encontrar en cualquier lugar.
Esta función CACHES resulta porque gethostbyname es una función muy lenta.
Para este alumno he implementado esta función:
Para una mayor confiabilidad, puede reemplazar $ _SERVER ['REMOTE_ADDR'] por get_ip_address () que @Pekka mencionó en su publicación como "esta pregunta de recompensa"
fuente
¿Qué tal comparar
$_SERVER['SERVER_ADDR'] === $_SERVER['REMOTE_ADDR']
para determinar si el cliente está en la misma máquina que el servidor?fuente
$_SERVER['SERVER_ADDR']
no siempre devuelve de manera confiable la dirección del servidor, por ejemplo, si usa balanceadores de carga, devuelve la dirección IP del balanceador de carga, creo.Encontré una respuesta fácil.
Porque todas las unidades locales tienen C: o D: o F: ... etc.
Solo detecta si el segundo carácter es un:
fuente