Seguridad de sesión PHP
¿Cuáles son algunas pautas para mantener una seguridad de sesión responsable con PHP? ¡Hay información en toda la web y ya es hora de que todo llegue a un solo lugar!
Hay un par de cosas que debe hacer para mantener su sesión segura:
- Utilice SSL al autenticar usuarios o realizar operaciones confidenciales.
- Regenere la identificación de la sesión cada vez que cambie el nivel de seguridad (como al iniciar sesión). Incluso puede regenerar la identificación de sesión en cada solicitud si lo desea.
- Tener sesiones de tiempo de espera
- No utilice registros globales
- Almacene los detalles de autenticación en el servidor. Es decir, no envíe detalles como el nombre de usuario en la cookie.
- Comprobar el
$_SERVER['HTTP_USER_AGENT']
. Esto añade una pequeña barrera al secuestro de sesiones. También puede comprobar la dirección IP. Pero esto causa problemas a los usuarios que cambian de dirección IP debido al equilibrio de carga en múltiples conexiones a Internet, etc. (como es el caso en nuestro entorno aquí). - Bloquee el acceso a las sesiones en el sistema de archivos o utilice un manejo de sesión personalizado
- Para operaciones confidenciales, considere solicitar a los usuarios registrados que proporcionen nuevamente sus detalles de autenticación.
Una pauta es llamar a session_regenerate_id cada vez que cambia el nivel de seguridad de una sesión. Esto ayuda a prevenir el secuestro de sesión.
Mis dos (o más) centavos:
- No confíes en nadie
- Filtrar entrada, escapar de salida (las cookies y los datos de la sesión también son su entrada)
- Evite XSS (mantenga su HTML bien formado, eche un vistazo a PHPTAL o HTMLPurifier )
- Defensa en profundidad
- No exponer datos
Hay un libro pequeño pero bueno sobre este tema: Essential PHP Security de Chris Shiflett .
Seguridad PHP esencial http://shiflett.org/images/essential-php-security-small.png
En la página de inicio del libro encontrará algunos ejemplos de código interesantes y capítulos de muestra.
Puede utilizar la técnica mencionada anteriormente (IP y UserAgent), descrita aquí: Cómo evitar el robo de identidad