Seguridad Guard
El CRM implementa un modelo de seguridad tipo "Front-Controller Gatekeeper" distribuido a través de todos los módulos. Ningún archivo PHP directo de la aplicación puede ejecutarse saltándose estas com
El CRM implementa un modelo de seguridad tipo "Front-Controller Gatekeeper" distribuido a través de todos los módulos. Ningún archivo PHP directo de la aplicación puede ejecutarse saltándose estas comprobaciones de integridad.
El Patrón _guard.php
Cada módulo de acciones (modules/*/actions/*.php) está protegido por un archivo base _guard.php localizado en su respectivo directorio actions/.
Este archivo se invoca en las primeras líneas de cualquier acción y se encarga de:
- Verificar el Método HTTP: Solo se permite tráfico POST. Las peticiones GET a scripts de acción son rechazadas automáticamente con código
405 Method Not Allowed. - Autenticación y Sesión: Comprueba si existe un token de sesión válido y si el usuario está activo.
- Control de Origen (CSRF): Ejecuta la función
app_verify_same_origin_request()para asegurar que la llamada proviene del dominio oficial y no es un ataque Cross-Site Request Forgery.
Ejemplo de uso (Acción típica)
<?php
// module/clientes/actions/crear_cliente.php
require_once __DIR__ . '/_guard.php';
$modulo_clientes_action_bootstrap();
// La ejecución solo llega hasta aquí si todas las reglas de seguridad han pasado
$nombre = $_POST['nombre'] ?? '';
// ... lógica de negocio ...Por qué este enfoque
- Universalidad: Al parchear masivamente todos los scripts existentes, cerramos cualquier posible brecha legacy.
- Transparencia: Los programadores de nuevos módulos no necesitan escribir complejas comprobaciones de sesión, basta con hacer un
requiredel guardián. - Auditoría: Todas las peticiones denegadas son registradas en los logs centrales del servidor.
Temas Visuales y HTMX
El frontend del CRM ha abandonado por completo arquitecturas de tipo Single Page Application (React/Vue/Angular) pesadas a favor de la pila HTMX + Alpine.js + TailwindCSS. Esta decisión nos otorga la
Playbook de Integración
Objetivo: Construir un módulo instalable y desinstalable que pueda montarse en la interfaz de usuario sin tocar una sola línea del core del sistema.