ALIANPOS V8 · QA PERFILES Y SEGURIDAD
Fecha: 2026-09-13

RESULTADO ESTÁTICO
- PHP revisados: 238
- Errores de sintaxis PHP: 0
- JavaScript revisados: 17
- Errores de sintaxis JavaScript: 0
- Rutas declaradas: 173
- Rutas duplicadas: 0
- Clases nuevas principales cargadas mediante el autoloader: OK
- Referencias de seguridad requeridas: OK

CONTROLES VERIFICADOS EN CÓDIGO
[OK] /perfil disponible para central, franquicia y sucursal.
[OK] Nombre/correo propio requieren contraseña actual.
[OK] Cambio de contraseña requiere contraseña actual y confirmación.
[OK] Contraseña de 10-128 caracteres y mínimo 3 clases.
[OK] CSRF + honeypot en perfil.
[OK] CSRF + honeypot en administración de equipos.
[OK] Rate limit para fallos de contraseña actual.
[OK] Rate limit se libera después de expirar el bloqueo.
[OK] security_version invalida otras sesiones.
[OK] Estado de cuenta y entorno se comprueba en cada solicitud.
[OK] Cambio de rol/caja/estado invalida sesiones afectadas.
[OK] Acceso temporal Gerencia -> Sucursal vinculado a security_version central.
[OK] Correos nuevos se validan contra central + franquicia + sucursal.
[OK] Hash de contraseña no se expone en la vista de perfil.
[OK] Auditoría de cambios propios y acciones administrativas de cuenta.
[OK] Mi perfil no depende de módulos ni permisos operativos.
[OK] Un usuario no puede bloquearse ni cambiarse su rol desde la pantalla de Equipo.

PRUEBAS QUE DEBEN HACERSE EN STAGING/PRODUCCIÓN
1. Ejecutar migración 036 sobre un respaldo reciente de MariaDB 10.6.
2. Confirmar que una sesión existente antes del despliegue V8 solicita iniciar sesión de nuevo.
3. Gerencia: cambiar nombre, comprobar sesión actual y revisar que otra sesión del mismo usuario se cierre.
4. Gerencia: cambiar correo y volver a iniciar sesión con el correo nuevo.
5. Gerencia: cambiar contraseña y confirmar rechazo de la contraseña anterior.
6. Crear un miembro de Equipo central con rol Gerencia lectura; confirmar Dashboard + Mi perfil y ausencia de secciones administrativas.
7. Sucursal: repetir cambios de perfil para administrador y para un usuario de equipo.
8. Cambiar el rol o caja de un usuario de sucursal desde Equipo; comprobar que su sesión anterior sea invalidada.
9. Franquicia: en Central -> Franquicias -> Acceso crear administrador; iniciar sesión y comprobar /franquicia/dashboard, /franquicia/equipo y /perfil.
10. Crear usuario de equipo de franquicia; confirmar que no puede administrar Equipo y sí puede usar Mi perfil.
11. Bloquear una franquicia desde Central; confirmar cierre del acceso de sus usuarios de franquicia.
12. Cambiar la contraseña de un usuario desde un administrador y comprobar que las otras sesiones del usuario quedan invalidadas.
13. Revisar registros creados en perfil_eventos_seguridad.

CONTROL RECOMENDADO DE CORREOS EXISTENTES
Antes de utilizar masivamente la gestión de perfiles, revise si el sistema histórico ya tiene el mismo correo en más de un tipo de cuenta. V8 impide crear nuevos duplicados, pero no cambia silenciosamente datos históricos.

SQL orientativo después de aplicar 036:

SELECT correo, COUNT(*) AS cuentas, GROUP_CONCAT(origen ORDER BY origen) AS origenes
FROM (
  SELECT LOWER(email) AS correo, 'central' AS origen FROM usuarios_centrales
  UNION ALL
  SELECT LOWER(email) AS correo, 'franquicia' AS origen FROM usuarios_franquicias
  UNION ALL
  SELECT LOWER(email) AS correo, 'sucursal' AS origen FROM usuarios
) x
WHERE correo IS NOT NULL AND correo <> ''
GROUP BY correo
HAVING COUNT(*) > 1;

NO VALIDADO DESDE ESTE ENTORNO
- Ejecución real de la migración 036 contra el MariaDB productivo del usuario.
- Inicio de sesión real con cookies del dominio productivo.
- Envío de correo: este módulo de perfil no requiere correo para el cambio; utiliza contraseña actual y revalidación de sesión.
