Cómo se protege el sistema

La seguridad de esta plataforma no es una lista de intenciones: cada control descrito aquí está implementado en el código y se puede comprobar.

Y lo que falta también se dice.

Cuentas y contraseñas

Almacenamiento de contraseñas

Se guardan con password_hash del propio PHP, algoritmo bcrypt y coste 12. Nunca en texto plano, nunca con MD5 ni SHA1.

Verificación en dos pasos

Segundo factor por aplicación de códigos temporales, con códigos de recuperación que se consumen al usarse.

Dispositivos de confianza

Se puede marcar un equipo para no repetir el segundo factor, y revocarlo después uno a uno o todos a la vez.

Baneos con caducidad

Un baneo puede ser temporal o indefinido, queda registrado con su motivo y su autor, y caduca solo.

Sesiones y formularios

Cookies de sesión

La cookie de sesión se emite con HttpOnly y SameSite, de modo que el JavaScript de la página no puede leerla ni enviarla desde otro sitio.

Protección de formularios

Toda operación que cambia datos exige un token CSRF emitido por el servidor. Sin él, la petición se rechaza.

Límite de intentos

El acceso, el registro, la recuperación de contraseña y el segundo factor tienen límite de peticiones por ventana de tiempo.

Base de datos

Todas las consultas usan sentencias preparadas con parámetros enlazados. La aplicación se conecta con un usuario que solo tiene permiso de lectura y escritura sobre su propia base, sin privilegios de administración.

Trazabilidad

Auditoría

Cada acción relevante queda registrada con su autor, su fecha y su origen, y puede exportarse.

Registro de accesos

Los intentos fallidos se contabilizan y se pueden consultar por cuenta y por dirección, con opción de bloquear.

Lo que todavía falta

La plataforma está en desarrollo activo. Antes de abrirla al público conviene saber que:

  • No se emiten todavía cabeceras Content-Security-Policy ni Strict-Transport-Security.
  • Las dependencias de interfaz se cargan desde un CDN sin atributo de integridad.
  • La autorización por permiso se comprueba de forma desigual en algunos módulos, así que no se debe dar acceso al panel a personas de poca confianza solo por asignarles un rol.