5 formas de reforzar la seguridad de tus sesiones en PHP

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!

mchojrin

Por mchojrin

Ayudo a desarrolladores PHP a acceder mercados y clientes más sofisticados y exigentes

¿Te quedó alguna duda? Publica aca tu pregunta

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.