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.¿Cómo puedo detectar si el usuario está en localhost en PHP?
Respuesta
También puede usar $_SERVER['REMOTE_ADDR']
para el cual la dirección IP del cliente que solicita la proporciona el servidor web.
$whitelist = array(
'127.0.0.1',
'::1'
);
if(!in_array($_SERVER['REMOTE_ADDR'], $whitelist)){
// not valid
}
$_SERVER["REMOTE_ADDR"]
debería decirle la IP del usuario. Es spoofable, sin embargo.
Compruebe this bounty question para una discusión muy detallada.
Creo que lo que recuerda con PHPMyAdmin es algo diferente: muchos servidores MySQL están configurados de modo que solo se puede acceder desde localhost por razones de seguridad.
Guau, parece que hay mucho más en esta pregunta de lo que pensaba ... –
Vale la pena señalar que algunos servidores MySQL están configurados así porque no se vinculan a una interfaz pública. Del mismo modo, si desea restringir una aplicación PHP de la misma manera, debe considerar la posibilidad de publicarla a través de una instancia de apache vinculada solo a una interfaz interna. –
No parece que puedes usar $_SERVER['HTTP_HOST']
, porque este es el valor de la cabecera HTTP, fácilmente falsificada.
También puede usar $_SERVER["REMOTE_ADDR"]
, este es el valor más seguro, pero también es posible simular. Esta remote_addr
es la dirección donde Apache devuelve el resultado.
'REMOTE_ADDR' es posible falsificar, sin embargo, si quiere fingirlo como' 127.0.0.1' o ':: 1', eso requiere comprometer la máquina, en la cual un' REMOTE_ADDR' falso es la menor de sus preocupaciones. Respuesta relevante: http://stackoverflow.com/a/5092951/3774582 – Goose
usuarios de sistemas operativos más recientes (Win 7, 8) también pueden verse en la necesidad de incluir una dirección remota IPV6-formato en su arsenal lista blanca:
$whitelist = array('127.0.0.1', "::1");
if(!in_array($_SERVER['REMOTE_ADDR'], $whitelist)){
// not valid
}
Como complemento, en función ...
function is_localhost() {
$whitelist = array('127.0.0.1', '::1');
return in_array($_SERVER['REMOTE_ADDR'], $whitelist);
}
Como buena práctica, recomendaría agregar "else return false;" para que la función siempre devuelva un valor booleano. O alternativamente, simplemente elimine completamente el "si" y en su lugar "devuelva in_array ($ _SERVER ['REMOTE_ADDR'], $ whitelist);" –
Si usted quiere tener un lista blanca/AllowList que soporta direcciones IP estática y nombres dinámicos.
Por ejemplo:
$whitelist = array("localhost", "127.0.0.1", "devel-pc.ds.com", "liveserver.com");
if (!isIPWhitelisted($whitelist)) die();
De esta manera se podría establecer una lista de nombres /IPS que serán capaces (con seguridad) para ser detectados. Los nombres dinámicos agregan más flexibilidad para acceder desde diferentes puntos.
tiene dos opciones comunes aquí, podría configurar un nombre en sus archivo Hosts local o usted podría utilizar un proveedor de dinámica de nombres que se podría encontrar en cualquier lugar.
Esta función CACHES resulta porque gethostbyname es una función muy lenta.
Por esta pupose he implementado esta función:
function isIPWhitelisted($whitelist = false)
{
if (isset($_SESSION) && isset($_SESSION['isipallowed']))
{ return $_SESSION['isipallowed']; }
// This is the whitelist
$ipchecklist = array("localhost", "127.0.0.1", "::1");
if ($whitelist) $ipchecklist = $whitelist;
$iplist = false;
$isipallowed = false;
$filename = "resolved-ip-list.txt";
$filename = substr(md5($filename), 0, 8)."_".$filename; // Just a spoon of security or just remove this line
if (file_exists($filename))
{
// If cache file has less than 1 day old use it
if (time() - filemtime($filename) <= 60*60*24*1)
$iplist = explode(";", file_get_contents($filename)); // Read cached resolved ips
}
// If file was not loaded or found -> generate ip list
if (!$iplist)
{
$iplist = array(); $c=0;
foreach ($ipchecklist as $k => $iptoresolve)
{
// gethostbyname: It's a VERY SLOW function. We really need to cache the resolved ip list
$ip = gethostbyname($iptoresolve);
if ($ip != "") $iplist[$c] = $ip;
$c++;
}
file_put_contents($filename, implode(";", $iplist));
}
if (in_array($_SERVER['REMOTE_ADDR'], $iplist)) // Check if the client ip is allowed
$isipallowed = true;
if (isset($_SESSION)) $_SESSION['isipallowed'] = $isipallowed;
return $isipallowed;
}
Para una mejor fiabilidad que podría reemplazar el $ _SERVER [ 'REMOTE_ADDR'] para la get_ip_address() que @Pekka mencionado en su post como "esta pregunta de generosidad"
No sé por qué alguien estableció un puntaje negativo en mi respuesta, mientras que claramente ofrece resolución dinámica de nombres y otros no. La resolución de DNS es lenta, por eso se requieren resoluciones de almacenamiento en caché. – Heroselohim
Encontré una respuesta fácil.
Debido a que todas las unidades locales tienen C: o D: o F: ... etc.
Sólo detectar si el segundo carácter es un:
if (substr_compare(getcwd(),":",1,1) == 0)
{
echo '<script type="text/javascript">alert(" The working dir is at the local computer ")</script>';
$client_or_server = 'client';
}
else
{
echo '<script type="text/javascript">alert(" The working dir is at the server ")</script>';
$client_or_server = 'server';
}
Esto funciona solo en Windows –
Como punto de comparación para determinar si $_SERVER['SERVER_ADDR'] === $_SERVER['REMOTE_ADDR']
el cliente está en la misma máquina que el servidor?
- 1. ¿Cómo puedo detectar si el usuario está "inactivo" con javascript?
- 2. Cómo detectar si un usuario ha cerrado sesión, en php?
- 3. Cómo detectar si un usuario deja una página en PHP
- 4. ¿Cómo puedo detectar cuándo el usuario está desplazándose activamente?
- 5. ¿Cómo puedo detectar si Dispatcher.DisableProcessing está activo?
- 6. PHP - Cómo detectar si el búfer de salida está activado
- 7. Detectar si el monitor está en C#
- 8. cómo detectar si el usuario tiene una aplicación en Cocoa
- 9. ¿Cómo puedo detectar qué dispositivo iOS está usando mi usuario?
- 10. ¿Cómo puedo detectar si un control ActiveX está cargado?
- 11. ¿Cómo puedo detectar si un iframe está cargado?
- 12. Cómo detectar si Safari está deshabilitado en el iPhone
- 13. ¿Cómo puedo detectar si quicktime está instalado con javascript?
- 14. Detectar si el dispositivo se está cargando
- 15. ¿Cómo puedo detectar si el bloqueo de mayúsculas está alternado en Swing?
- 16. ¿Cómo detectar si Vista UAC está habilitado?
- 17. ¿Cómo puedo determinar si una matriz está vacía en PHP?
- 18. ¿Cómo detectar si Java está habilitado en IE?
- 19. ¿Cómo verificar ASP.NET si el usuario está en línea?
- 20. cómo detectar si el modo de acción ya está presente
- 21. Cómo verifico si el usuario está conectado en Javascript
- 22. ¿Cómo detectar si un micrófono está presente en Android?
- 23. Detectar si el salvapantallas está activo y/o el usuario ha bloqueado la pantalla en Windows
- 24. Cómo detectar si ASP.NET está habilitada en IIS 7
- 25. ¿Cómo puedo detectar si el usuario ha hecho doble clic en pygame?
- 26. detectar el idioma del usuario en PHP - solución estable
- 27. ¿Cómo identificar si un usuario está siendo suplantado en Symfony2?
- 28. Compruebe si el usuario está actualmente en línea (en vivo)
- 29. ¿Cómo puedo detectar si ActiveX está habilitado en el navegador del cliente?
- 30. Detectar si el depurador está conectado en VB6
Lo que haría esto realmente más fácil de romper que suplantar el IP. Realmente deberías cambiarlo. –
Esto no funciona para mí. $ _SERVER ['HTTP_HOST'] devuelve la parte textual de mi dominio (por ejemplo, "ejemplo" si el dominio fuera www.example.com). – skcin7
@ skcin7 podría ser su configuración de servidor. revisalo. – mauris