seguridad de sesión en php

0

Esto se ha pedido un montón de veces. Solo tengo curiosidad por ver si el código a continuación proporciona un nivel de seguridad bastante significativo.

¿Hay otros casos que debería considerar?

A continuación es sólo un ejemplo; por favor ignora cualquier problema de sintaxis; Estoy buscando información sobre el aspecto de seguridad del código.

Algunas suposiciones:

  1. Si el usuario no hace nada en 5 segundos, cierre la sesión.
  2. Si el usuario no viene de alguna página, cierre la sesión.
  3. Si la dirección IP de los usuarios cambia, cierre la sesión.

Código:

<?php
session_start();
$time = time();
$ip = $_SERVER['REMOTE_ADDR'];

if ($time - $_SESSION['time'] > 5)
{
    //function to log out user...//echo "logged Out,Time";
}
elseif ($ip !== $_SESSION['ip'])
{
    //function to log out user...//echo "logged out,IP";
}
elseif ($_SERVER['HTTP_REFERER'] !== "http://server.com/somePage.php")
{
    //function to log out user...//echo "logged out,Refer";
}
else
{
   //do sensitive stuff
}
$_SESSION['time'] = $time;
$_SESSION['ip'] = $_SERVER['REMOTE_ADDR'];
?>
    
pregunta bart2puck 24.03.2014 - 16:26
fuente

2 respuestas

1
  

vea si el código a continuación proporciona un nivel de seguridad bastante significativo

Es difícil dar sugerencias cuando no está claro contra qué tipo de ataques intenta protegerse.

Mi respuesta es que estas configuraciones serían molestas.

  

$ _SERVER ['HTTP_REFERER']! == " enlace "

Esto evitaría que las personas marquen su sitio web de manera efectiva. También podría ser un vector de denegación de servicio si alguien utiliza la falsificación de solicitud de sitios cruzados para redirigir a sus usuarios a esta página con el referente incorrecto; cerrar la sesión de sus usuarios de manera efectiva cada vez que visitan una página envenenada.

  

$ ip! == $ _SESSION ['ip']

Esto dificultaría el uso de su sitio junto con una red de anonimato como Tor. No hay nada más molesto que cerrar la sesión cada 10 minutos porque su dirección IP "cambió".

  

$ time - $ _SESSION ['time'] > 5

Esto es muy subjetivo. Es realmente responsabilidad del usuario proteger su computadora si la deja desatendida, usted no conoce la situación de la vida real del usuario.

    
respondido por el user2675345 24.03.2014 - 17:17
fuente
1

Estoy de acuerdo con el usuario2675345: probablemente no sea una buena idea vincular la sesión a la IP. Echa un vistazo a aquí por los motivos.

Sin embargo, podría enlazar la sesión con HTTP_USER_AGENT . Consulte la sección de secuestro de sesión aquí para obtener una solución completa. Asegúrese de agregar una sal aleatoria a la cadena.

También puede consultar esta responder en SO para obtener una lista completa de ideas genéricas para que su sesión sea más seguro.

Nota para mitigar el uso de xss HttpOnly .

    
respondido por el ForguesR 28.01.2015 - 14:59
fuente

Lea otras preguntas en las etiquetas