En un post anterior había mencionado cuáles son los riesgos a los que están sujetas las sesiones PHP.
En este artículo voy a darte algunos tips para mejorar la seguridad de tus sesiones y dormir más tranquilo 🙂
1. Usa siempre HTTPS
La mejor forma de reforzar la seguridad de tus aplicaciones (No sólo de las sesiones) es utilizar tráfico cifrado, de esta forma, aún si alguien logra capturar el tráfico le será virtualmente imposible leer el contenido.
Puedes conseguir certificados gratuitos usando, por ejemplo, LetsEncrypt
2. Cambia el nombre de tu cookie de sesión
El nombre por defecto de la cookie de sesión es PHPSESSID
pero puedes cambiarlo usando session_name() o desde la configuración de php (La variable session.name
).
Al cambiar este dato harás más dificultoso para un atacante saber cuál es la cookie que contiene el id de sesión.
3. Habilita el modo de sesión estricto
En este modo (deshabilitado por defecto) el servidor sólo reconocerá como válidas aquellas sesiones cuyo identificador haya sido generado por él.
Este cambio se realiza a través de la entrada session.use_strict_mode del archivo php.ini.
4. Fuerza el uso de cookies de sesión
Con este cambio harás imposible que alguien, sin darse cuenta, comparta un enlace que contiene su id de sesión.
Para ello debes modificar el valor de session.use-only-cookies
5. Mantén información adicional dentro de las variables de sesión
Al momento de inicializar una sesión no guardes sólo el id de usuario si no algún otro dato que permita validar la identidad del visitante, por ejemplo:
<?php session_start(); if (successfulLogin()){ $_SESSION['uid'] = $userId; $_SESSION['userAgent'] = $_SERVER['HTTP_USER_AGENT']; $_SESSION['ip'] = $_SERVER['REMOTE_ADDR']; }
Luego, en cada página donde debas validar la identidad del usuario:
<?php session_start(); if (empty($_SESSION['uid']) || isValidUser($_SESSION['uid'])) { http_response_code(403); die; } if ($_SESSION['userAgent'] !== $_SERVER['HTTP_USER_AGENT']) { http_response_code(403); die; } if ($_SESSION['ip'] !== $_SERVER['REMOTE_ADDR']) { http_response_code(403); die; }
De este modo, aún si alguien logra robar la cookie de sesión le será imposible utilizarla
Espero que estos tips te hayan servido, si te quedó alguna pregunta no dudes en dejarla en los comentarios!