# Cambios de seguridad aplicados

Fecha de preparación: 29 de julio de 2026.

## Corregido

- Los empleados ahora deben proporcionar código y contraseña.
- Todas las rutas de acceso usan consultas preparadas y `PasswordHelper`.
- El endpoint administrativo heredado `admin/action/login2.php` devuelve HTTP 410.
- La recuperación usa tokens aleatorios de un solo uso con vencimiento de una hora.
- El cambio de contraseña ya no acepta `uid` ni `idrc` desde el navegador.
- Las contraseñas nuevas se almacenan con `password_hash()`.
- Las plantillas de correo no incluyen contraseñas.
- El envío nativo duplicado con `mail()` fue desactivado; se usa PHPMailer.
- Se eliminaron credenciales de base de datos escritas en el código.
- Se retiraron volcados SQL, registros históricos y archivos operativos cargados por usuarios.
- Se eliminaron referencias públicas heredadas a dominios y marcas ajenas.
- Se retiraron correos personales heredados de comentarios y plantillas; el encabezado del PDF usa ahora la configuración administrable del sitio.
- Se reforzó la denegación de acceso directo a la configuración y la ejecución de scripts dentro de `Documentos`.
- `cron.php` solo puede ejecutarse desde CLI y no muestra depuración SMTP.

## Requiere acción del administrador

- Rotar la contraseña de MySQL.
- Rotar la contraseña SMTP.
- Importar una base saneada fuera del directorio público.
- Forzar el restablecimiento de contraseñas antiguas o configurar la clave heredada solo durante la migración.
- Revisar logs del hosting, WAF, correo y base de datos para determinar si hubo explotación previa.

## Alcance de validación

Se realizó revisión estática y validación de sintaxis PHP. No se conectó el proyecto a una base real ni se ejecutaron pruebas funcionales contra el servidor de producción.
