REFERENCIA / TÉCNICA

Documentación Técnica

Auditoría OWASP, arquitectura de lectura pública y mitigación de problemas en hosting LiteSpeed.

§ 01

Ciberseguridad (OWASP Audit)

Mecanismos implementados para fortificar la plataforma frente a ataques web.

Vulnerabilidad Mitigada Solución Implementada
Fuerza Bruta / DoS Tabla login_attempts que bloquea la dirección IP durante 15 minutos tras 5 intentos fallidos de autenticación.
Inyección SQL (SQLi) Refactorización global a sentencias preparadas de PDO (`Prepared Statements`). Prohibición absoluta de concatenación de variables en el backend.
Race Conditions (Invitaciones) El canje de un código de invitación utiliza una operación de UPDATE atómica en MySQL (ej. UPDATE invitaciones SET usado=1 WHERE codigo=? AND usado=0), validando las filas afectadas.
Cross-Site Scripting (XSS) Sanitización en la entrada de datos. Todas las cadenas se pasan por htmlspecialchars(..., ENT_QUOTES) al guardar en la base de datos.
Insecure Direct Object Reference (IDOR) Restricción dura a nivel de BD. Las ediciones y eliminaciones filtran forzosamente por usuario_id extraído del JWT/Sesión.

§ 02

Backend / API REST

GET
Lectura Pública (get_evaluaciones.php)
Este endpoint fue extraído intencionalmente del bloque de protección de sesión (`isset($_SESSION['user_id'])`), permitiendo que la capa de presentación consuma datos sin autenticarse.
Public
POST
Caché Busters
En entornos LiteSpeed, las llamadas AJAX para obtener los calendarios públicos se transformaron de GET a POST para forzar al Proxy/Caché a procesar la solicitud en tiempo real desde PHP.
Network

§ 03

Frontend y Fallbacks

Componente Responsabilidad
script.js Motor lógico del DOM. Se eliminó la característica de `localStorage_fallback` que provocaba "alucinaciones" (evaluaciones fantasma) durante respuestas HTTP 500 del servidor. El frontend ahora actúa como un cliente tonto confiando plenamente en la DB.
pdf_generator.js Responsable de clonar el contenido del DOM visible y compilarlo en un buffer base64 para descargar PDFs locales.