jerkjs 2.5.4 → 2.5.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (69) hide show
  1. package/BENCHMARK_RESULTS.md +60 -0
  2. package/CHANGELOG.md +43 -0
  3. package/ESTADISTICAS_RENDIMIENTO.md +106 -0
  4. package/README.md +142 -423
  5. package/README_LEGACY.md +513 -0
  6. package/debug_hook.js +11 -0
  7. package/doc-2.5/ADMIN_EXTENSION_COMMANDS_MANUAL.md +261 -0
  8. package/doc-2.5/ADMIN_EXTENSION_HOOK_EXAMPLE.md +28 -0
  9. package/doc-2.5/ADMIN_EXTENSION_INTEGRATION_MANUAL.md +232 -0
  10. package/doc-2.5/CACHE_SYSTEM_MAP.md +206 -0
  11. package/doc-2.5/SESSION_SECURITY_FLAGS.md +174 -0
  12. package/doc-2.5/an/303/241lisis-completo-jerk-framework.md +213 -0
  13. package/docs/CACHE_SYSTEM_MAP.md +206 -0
  14. package/docs/SERVER_OPTIMIZATION_NOTES.md +87 -0
  15. package/index.js +7 -1
  16. package/jerk2.5.webp +0 -0
  17. package/lib/admin/AdminExtension.js +436 -0
  18. package/lib/admin/ModuleLoader.js +77 -0
  19. package/lib/admin/config.js +21 -0
  20. package/lib/admin/modules/CacheModule.js +145 -0
  21. package/lib/admin/modules/STATS_MODULE_README.md +98 -0
  22. package/lib/admin/modules/StatsModule.js +140 -0
  23. package/lib/admin/modules/SystemModule.js +140 -0
  24. package/lib/admin/modules/TimeModule.js +95 -0
  25. package/lib/cache/CacheHooks.js +141 -0
  26. package/lib/core/server.js +199 -46
  27. package/lib/middleware/session.js +11 -3
  28. package/lib/mvc/viewEngine.js +26 -1
  29. package/lib/router/RouteMatcher.js +242 -54
  30. package/lib/utils/globalStats.js +16 -0
  31. package/package.json +2 -2
  32. package/@qaLoadModel/controllers/ProductController.js +0 -143
  33. package/@qaLoadModel/controllers/UserController.js +0 -143
  34. package/@qaLoadModel/models/ProductModel.js +0 -41
  35. package/@qaLoadModel/models/UserModel.js +0 -41
  36. package/@qaLoadModel/package.json +0 -22
  37. package/@qaLoadModel/qa_report.md +0 -71
  38. package/@qaLoadModel/results.md +0 -97
  39. package/@qaLoadModel/routes.json +0 -58
  40. package/@qaLoadModel/server.js +0 -43
  41. package/@qaLoadModel/simple-test.js +0 -96
  42. package/@qaLoadModel/test-models.js +0 -144
  43. package/@qaLoadModel/test_endpoints.sh +0 -35
  44. package/@qaLoadModel/test_final.js +0 -89
  45. package/@qaLoadModel/views/products/index.html +0 -45
  46. package/@qaLoadModel/views/products/show.html +0 -27
  47. package/@qaLoadModel/views/users/index.html +0 -44
  48. package/@qaLoadModel/views/users/show.html +0 -26
  49. package/qa/INFORME_QA_JERKJS_ROUTING.md +0 -108
  50. package/qa/informe_qa_fix_enrutamiento.md +0 -93
  51. package/qa-app/controllers/homeController.js +0 -9
  52. package/qa-app/controllers/userController.js +0 -76
  53. package/qa-app/hooks-config.js +0 -65
  54. package/qa-app/models/UserModel.js +0 -36
  55. package/qa-app/package-lock.json +0 -1683
  56. package/qa-app/package.json +0 -25
  57. package/qa-app/public/css/style.css +0 -15
  58. package/qa-app/public/images/logo.png +0 -3
  59. package/qa-app/public/index.html +0 -15
  60. package/qa-app/public/js/main.js +0 -7
  61. package/qa-app/routes/api-routes.json +0 -23
  62. package/qa-app/routes/page-routes.json +0 -16
  63. package/qa-app/routes/static-routes.json +0 -20
  64. package/qa-app/server.js +0 -68
  65. package/qa-app/views/footer.html +0 -3
  66. package/qa-app/views/index.html +0 -20
  67. package/qa-app/views/users.html +0 -20
  68. package/utils/find_file_path.sh +0 -36
  69. /package/{doc2.5.3 → doc-2.5}/manual-mvc-completo.md +0 -0
@@ -0,0 +1,206 @@
1
+ # Mapa de Procesos de Caché del Framework JERK
2
+
3
+ ## Introducción
4
+
5
+ Este documento describe los diferentes sistemas de caché implementados en el framework JERK y cómo se integran en los flujos del sistema.
6
+
7
+ ## Sistemas de Caché
8
+
9
+ ### 1. Caché de Expresiones Regulares para Rutas (RouteMatcher)
10
+
11
+ **Ubicación**: `lib/router/RouteMatcher.js`
12
+ **Tipo**: Mapa de caché (Map)
13
+ **Propósito**: Almacenar expresiones regulares compiladas para rutas parametrizadas
14
+ **Clave**: Ruta con parámetros (ej. `/users/:id`)
15
+ **Valor**: Expresión regular compilada
16
+ **Flujo de proceso**:
17
+ 1. Al procesar una ruta parametrizada, se convierte a expresión regular
18
+ 2. Antes de compilar, se verifica si ya existe en el cache
19
+ 3. Si existe, se devuelve la expresión regular cacheada
20
+ 4. Si no existe, se compila, se almacena en cache y se devuelve
21
+
22
+ **Beneficios**:
23
+ - Evita compilación repetida de expresiones regulares
24
+ - Mejora el rendimiento de coincidencia de rutas parametrizadas
25
+ - Reduce el uso de CPU en operaciones repetidas
26
+
27
+ ### 2. Caché de Vistas (ViewEngine)
28
+
29
+ **Ubicación**: `lib/mvc/viewEngine.js`
30
+ **Tipo**: Mapa de caché (Map)
31
+ **Propósito**: Almacenar contenido de vistas ya procesadas (sin variables)
32
+ **Clave**: Ruta completa del archivo de vista
33
+ **Valor**: Contenido de la vista procesado (condiciones, bucles, etc. resueltos)
34
+ **Flujo de proceso**:
35
+ 1. Al solicitar una vista, se verifica si está en cache
36
+ 2. Si está en cache, se procesa con las variables y se devuelve
37
+ 3. Si no está en cache, se lee el archivo, se procesa (condiciones, bucles, etc.)
38
+ 4. Si el cache está habilitado, se almacena la vista procesada (sin variables)
39
+ 5. Se procesan las variables y se devuelve el resultado
40
+
41
+ **Beneficios**:
42
+ - Evita lectura repetida de archivos de vistas
43
+ - Evita procesamiento repetido de condiciones y bucles
44
+ - Mejora el rendimiento de renderizado de vistas
45
+
46
+ ### 3. Caché de Controladores (ControllerLoader)
47
+
48
+ **Ubicación**: `lib/loader/controllerLoader.js`
49
+ **Tipo**: Sistema de caché de módulos de Node.js
50
+ **Propósito**: Evitar recarga repetida de módulos de controladores
51
+ **Clave**: Ruta del archivo del controlador
52
+ **Valor**: Instancia del módulo del controlador
53
+ **Flujo de proceso**:
54
+ 1. Al cargar un controlador, se verifica si ya está en el cache de require
55
+ 2. Si no está en cache, se carga y se mantiene en require.cache
56
+ 3. En subsiguientes solicitudes, se devuelve la instancia cacheada
57
+
58
+ **Beneficios**:
59
+ - Evita recarga repetida de módulos
60
+ - Mejora el rendimiento de carga de controladores
61
+ - Reduce el uso de memoria
62
+
63
+ ### 4. Índices de Rutas (RouteMatcher)
64
+
65
+ **Ubicación**: `lib/router/RouteMatcher.js`
66
+ **Tipo**: Mapas de índices y estructuras de datos
67
+ **Propósito**: Optimizar la búsqueda de rutas mediante pre-filtrado
68
+ **Componentes**:
69
+ - `exactRoutes`: Mapa de rutas exactas por método y path
70
+ - `routeBuckets`: Estructura jerárquica por método, número de segmentos y primer segmento
71
+ - `indexesValid`: Bandera para validar si los índices están actualizados
72
+
73
+ **Flujo de proceso**:
74
+ 1. Al registrar rutas, se actualizan los índices
75
+ 2. Al buscar una ruta, se usan los índices para pre-filtrar candidatos
76
+ 3. Se buscan coincidencias exactas primero (más rápido)
77
+ 4. Se buscan rutas parametrizadas solo entre candidatos filtrados
78
+ 5. Se buscan rutas estáticas por prefijo entre candidatos filtrados
79
+
80
+ **Beneficios**:
81
+ - Reduce drásticamente el número de rutas a evaluar
82
+ - Mejora el rendimiento de coincidencia de rutas
83
+ - Escala mejor con un gran número de rutas
84
+
85
+ ## Flujos de Integración de Caché
86
+
87
+ ### Flujo de Procesamiento de Solicitudes
88
+
89
+ ```
90
+ Solicitud HTTP
91
+
92
+ Middleware de seguridad
93
+
94
+ Verificación de índices de rutas (RouteMatcher)
95
+
96
+ → Búsqueda por ruta exacta (más rápida)
97
+
98
+ → Pre-filtrado por número de segmentos y primer segmento
99
+
100
+ → Búsqueda en rutas candidatas
101
+
102
+ → Coincidencia con expresiones regulares (usando cache)
103
+
104
+ Ejecución del handler de la ruta
105
+
106
+ Renderizado de vista (usando cache de vistas)
107
+
108
+ Respuesta HTTP
109
+ ```
110
+
111
+ ### Flujo de Caché de Expresiones Regulares
112
+
113
+ ```
114
+ Solicitud de coincidencia de ruta parametrizada
115
+
116
+ → ¿Está la expresión regular en cache?
117
+
118
+ ┌─────────────┬─────────────┐
119
+ │ SÍ │ NO │
120
+ │ │ │
121
+ │ Devolver │ Compilar │
122
+ │ regex │ expresión │
123
+ │ cacheada │ regular │
124
+ │ │ │
125
+ └─────────────┴─────────────┘
126
+
127
+ Almacenar en cache
128
+
129
+ Usar para coincidencia
130
+ ```
131
+
132
+ ### Flujo de Caché de Vistas
133
+
134
+ ```
135
+ Solicitud de renderizado de vista
136
+
137
+ → ¿Está la vista en cache?
138
+
139
+ ┌─────────────┬─────────────┐
140
+ │ SÍ │ NO │
141
+ │ │ │
142
+ │ Procesar │ Leer archivo│
143
+ │ con vars │ de vista │
144
+ │ │ │
145
+ │ Devolver │ Procesar │
146
+ │ resultado │ condiciónes,│
147
+ │ │ bucles, etc.│
148
+ │ │ │
149
+ │ │ → ¿Cache │
150
+ │ │ habilitado?│
151
+ │ │ ↓ │
152
+ │ │ ┌─────────┼─┐
153
+ │ │ │ SÍ │ │
154
+ │ │ │ │ │
155
+ │ │ │ Almacenar││
156
+ │ │ │ vista en ││
157
+ │ │ │ cache ││
158
+ │ │ └─────────┼─┘
159
+ │ │ │
160
+ └─────────────┴─────────────┘
161
+
162
+ Devolver HTML renderizado
163
+ ```
164
+
165
+ ## Estrategias de Invalidación de Caché
166
+
167
+ ### Caché de Expresiones Regulares
168
+ - No requiere invalidación frecuente
169
+ - Se actualiza automáticamente al cambiar las rutas
170
+
171
+ ### Caché de Vistas
172
+ - Se puede limpiar manualmente con `viewEngine.clearCache()`
173
+ - No se invalida automáticamente (diseñado para vistas estáticas)
174
+
175
+ ### Caché de Controladores
176
+ - Se mantiene durante todo el ciclo de vida del proceso
177
+ - Se puede limpiar manualmente eliminando del `require.cache`
178
+
179
+ ### Índices de Rutas
180
+ - Se actualizan automáticamente al registrar nuevas rutas
181
+ - Se invalidan si cambia el número total de rutas
182
+
183
+ ## Beneficios del Sistema de Caché
184
+
185
+ 1. **Mejora de Rendimiento**: Reducción significativa de operaciones repetidas
186
+ 2. **Eficiencia de CPU**: Menos compilación de expresiones regulares y procesamiento de vistas
187
+ 3. **Eficiencia de I/O**: Menos lecturas de disco para archivos de vistas
188
+ 4. **Escalabilidad**: Mejor manejo de alto volumen de solicitudes
189
+ 5. **Optimización de Memoria**: Reutilización de estructuras de datos ya procesadas
190
+
191
+ ## Consideraciones de Seguridad
192
+
193
+ - Las cachés no almacenan datos sensibles de usuarios
194
+ - Las expresiones regulares cacheadas no contienen información de entrada del usuario
195
+ - Las vistas cacheadas no contienen datos de sesión o variables de usuario
196
+ - El sistema de caché no expone información interna del sistema
197
+
198
+ ## Conclusión
199
+
200
+ El framework JERK implementa múltiples niveles de caché para optimizar el rendimiento:
201
+ - Caché de expresiones regulares para rutas parametrizadas
202
+ - Caché de vistas procesadas
203
+ - Índices optimizados para búsqueda de rutas
204
+ - Caché de módulos de controladores
205
+
206
+ Estos sistemas de caché trabajan juntos para proporcionar un rendimiento óptimo al minimizar operaciones repetidas y maximizar la eficiencia del procesamiento de solicitudes.
@@ -0,0 +1,174 @@
1
+ # Personalización de Flags de Seguridad para Cookies de Sesión
2
+
3
+ ## Introducción
4
+
5
+ Desde la versión 2.5.5, el framework JERK permite la personalización de las flags de seguridad para las cookies de sesión a través del sistema de hooks y filtros. Esto permite a los desarrolladores implementar medidas de seguridad adicionales según sus necesidades específicas.
6
+
7
+ ## Filtros Disponibles
8
+
9
+ El sistema de sesiones incluye dos filtros principales para la personalización de las flags de las cookies:
10
+
11
+ ### 1. `session_cookie_flags`
12
+
13
+ Este filtro se aplica cuando se crea una nueva cookie de sesión. Permite modificar las flags que se aplican a la cookie cuando se establece por primera vez.
14
+
15
+ **Parámetros:**
16
+ - `defaultFlags` (string): Las flags predeterminadas de la cookie (`HttpOnly; Path=/`)
17
+ - `req` (object): El objeto de solicitud HTTP
18
+ - `res` (object): El objeto de respuesta HTTP
19
+ - `sessionId` (string): El ID de la sesión que se está creando
20
+
21
+ ### 2. `session_cookie_destroy_flags`
22
+
23
+ Este filtro se aplica cuando se destruye una cookie de sesión. Permite modificar las flags que se aplican a la cookie cuando se borra.
24
+
25
+ **Parámetros:**
26
+ - `defaultFlags` (string): Las flags predeterminadas de la cookie destruida (`HttpOnly; Path=/`)
27
+ - `req` (object): El objeto de solicitud HTTP
28
+ - `res` (object): El objeto de respuesta HTTP
29
+ - `sessionId` (string): El ID de la sesión que se está destruyendo
30
+
31
+ ## Uso Básico
32
+
33
+ ### Ejemplo Simple
34
+
35
+ ```javascript
36
+ const { hooks } = require('jerkjs');
37
+
38
+ // Añadir SameSite=Lax a todas las cookies de sesión
39
+ hooks.addFilter('session_cookie_flags', (defaultFlags, req, res, sessionId) => {
40
+ return defaultFlags + '; SameSite=Lax';
41
+ });
42
+
43
+ // Añadir SameSite=Lax a las cookies de sesión cuando se destruyen
44
+ hooks.addFilter('session_cookie_destroy_flags', (defaultFlags, req, res, sessionId) => {
45
+ return defaultFlags + '; SameSite=Lax';
46
+ });
47
+ ```
48
+
49
+ ### Ejemplo Avanzado con Detección de HTTPS
50
+
51
+ ```javascript
52
+ const { hooks } = require('jerkjs');
53
+
54
+ // Personalizar flags basadas en el protocolo de la solicitud
55
+ hooks.addFilter('session_cookie_flags', (defaultFlags, req, res, sessionId) => {
56
+ // Detectar si la solicitud es HTTPS (para entornos reales o proxy)
57
+ const isHttps = (req && req.connection && req.connection.encrypted) ||
58
+ (req && req.headers && req.headers['x-forwarded-proto'] === 'https');
59
+
60
+ let flags = defaultFlags;
61
+
62
+ // Agregar la flag Secure si es HTTPS
63
+ if (isHttps) {
64
+ flags += '; Secure';
65
+ }
66
+
67
+ // Agregar SameSite según el contexto
68
+ flags += '; SameSite=Lax';
69
+
70
+ return flags;
71
+ });
72
+
73
+ // Aplicar la misma lógica al destruir la sesión
74
+ hooks.addFilter('session_cookie_destroy_flags', (defaultFlags, req, res, sessionId) => {
75
+ const isHttps = (req && req.connection && req.connection.encrypted) ||
76
+ (req && req.headers && req.headers['x-forwarded-proto'] === 'https');
77
+
78
+ let flags = defaultFlags;
79
+
80
+ if (isHttps) {
81
+ flags += '; Secure';
82
+ }
83
+
84
+ flags += '; SameSite=Lax';
85
+
86
+ return flags;
87
+ });
88
+ ```
89
+
90
+ ## Flags de Seguridad Comunes
91
+
92
+ ### Flags ya implementadas
93
+
94
+ - **HttpOnly**: Previene ataques de secuestro de sesión mediante XSS
95
+ - **Secure**: Asegura que la cookie solo se transmita a través de conexiones HTTPS
96
+ - **SameSite**: Previene ataques de falsificación de solicitudes entre sitios (CSRF)
97
+
98
+ ### Flags adicionales disponibles
99
+
100
+ - **Partitioned**: Proporciona una capa adicional de protección contra ataques de secuestro de sesión, especialmente en contextos de terceros. Compatible con `SameSite`.
101
+
102
+ ### Ejemplo con Partitioned
103
+
104
+ ```javascript
105
+ hooks.addFilter('session_cookie_flags', (defaultFlags, req, res, sessionId) => {
106
+ const isHttps = (req && req.connection && req.connection.encrypted) ||
107
+ (req && req.headers && req.headers['x-forwarded-proto'] === 'https');
108
+
109
+ let flags = defaultFlags;
110
+
111
+ if (isHttps) {
112
+ flags += '; Secure';
113
+ }
114
+
115
+ // SameSite=Lax es generalmente recomendado para sesiones
116
+ flags += '; SameSite=Lax';
117
+
118
+ // Partitioned es opcional y depende del contexto de uso
119
+ // Solo se recomienda en ciertos escenarios específicos
120
+ // flags += '; Partitioned'; // Descomentar si se requiere
121
+
122
+ return flags;
123
+ });
124
+ ```
125
+
126
+ ## Consideraciones de Seguridad
127
+
128
+ ### SameSite Options
129
+
130
+ - `SameSite=Strict`: La cookie solo se envía en contextos de primer nivel (mismo sitio)
131
+ - `SameSite=Lax`: La cookie se envía en solicitudes de navegación de alto nivel (links, etc.)
132
+ - `SameSite=None`: La cookie se envía en todos los contextos (requiere Secure)
133
+
134
+ ### Recomendaciones
135
+
136
+ - Siempre usar `Secure` en entornos HTTPS
137
+ - Usar `SameSite=Lax` para la mayoría de los casos de sesión
138
+ - Considerar `SameSite=Strict` para operaciones sensibles
139
+ - `Partitioned` es experimental y debe usarse con precaución
140
+
141
+ ## Ejemplos de Configuraciones Comunes
142
+
143
+ ### Entorno de Producción (HTTPS)
144
+
145
+ ```javascript
146
+ hooks.addFilter('session_cookie_flags', (defaultFlags, req, res, sessionId) => {
147
+ return defaultFlags + '; Secure; SameSite=Strict';
148
+ });
149
+ ```
150
+
151
+ ### Aplicación con Subdominios
152
+
153
+ ```javascript
154
+ hooks.addFilter('session_cookie_flags', (defaultFlags, req, res, sessionId) => {
155
+ const isHttps = (req && req.connection && req.connection.encrypted) ||
156
+ (req && req.headers && req.headers['x-forwarded-proto'] === 'https');
157
+
158
+ let flags = defaultFlags;
159
+
160
+ if (isHttps) {
161
+ flags += '; Secure';
162
+ }
163
+
164
+ // Para aplicaciones con subdominios, SameSite=None puede ser necesario
165
+ // Pero requiere la flag Secure
166
+ flags += '; SameSite=None';
167
+
168
+ return flags;
169
+ });
170
+ ```
171
+
172
+ ## Conclusión
173
+
174
+ El sistema de filtros para las cookies de sesión proporciona una forma flexible y potente de personalizar las flags de seguridad según las necesidades específicas de cada aplicación. Esto mejora significativamente la seguridad del sistema de sesiones en comparación con la implementación predeterminada.
@@ -0,0 +1,213 @@
1
+ # Análisis Completo del Framework JERK
2
+
3
+ ## Descripción General
4
+
5
+ JERK es un framework de desarrollo web completo para Node.js que implementa una arquitectura MVC (Modelo-Vista-Controlador) con soporte para APIs REST, seguridad avanzada, y sistemas de plantillas. La versión actual es 2.5.4.
6
+
7
+ ## Arquitectura General
8
+
9
+ El framework está estructurado en componentes modulares que se comunican entre sí a través de un sistema de hooks y filtros, permitiendo una alta extensibilidad y personalización.
10
+
11
+ ## Componentes Principales
12
+
13
+ ### 1. Servidor Principal (APIServer)
14
+
15
+ - Implementa un servidor HTTP/HTTPS básico con soporte para rutas parametrizadas
16
+ - Incluye manejo de archivos estáticos con soporte para índices y control de caché
17
+ - Tiene integración con sistema de hooks para extensibilidad
18
+ - Soporta middlewares y manejo de cuerpos de solicitud con límites de tamaño
19
+
20
+ ### 2. Sistema de Enrutamiento
21
+
22
+ - **Router**: Sistema de enrutamiento avanzado con soporte para rutas anidadas
23
+ - **RouteMatcher**: Componente especializado para coincidencia de rutas parametrizadas con cacheo de expresiones regulares
24
+ - Soporta rutas estáticas y dinámicas con prioridad adecuada
25
+
26
+ ### 3. Middleware
27
+
28
+ - **CORS**: Middleware para configuración de políticas de recursos cruzados
29
+ - **Authenticator**: Sistema de autenticación con múltiples estrategias (JWT, API Keys, Basic Auth, OAuth2, OpenID Connect)
30
+ - **Session**: Sistema de sesiones con almacenamiento en memoria y cookies seguras
31
+ - **Validator**: Validador de esquemas para solicitudes HTTP
32
+ - **RateLimiter**: Limitador de tasa con almacenamiento en memoria o Redis
33
+ - **Compressor**: Middleware de compresión (gzip/deflate) con sistema de hooks
34
+ - **Firewall**: Web Application Firewall (WAF) con detección de patrones de ataque
35
+ - **AuditLogger**: Sistema de auditoría para eventos de seguridad
36
+
37
+ ### 4. Componentes MVC
38
+
39
+ - **ControllerBase**: Controlador base con soporte para vistas, layouts y variables
40
+ - **ModelBase**: Clase base para modelos con operaciones CRUD
41
+ - **ViewEngine**: Motor de plantillas profesional con soporte para filtros, helpers, condiciones, bucles e inclusiones
42
+ - **ModelManager**: Gestor de modelos con soporte para múltiples adaptadores
43
+ - **Adaptadores**: Soporte para diferentes motores de base de datos (Memory, MariaDB/MySQL, SQLite)
44
+
45
+ ### 5. Sistema de Seguridad
46
+
47
+ - **SecurityEnhancedServer**: Servidor con funcionalidades de seguridad avanzada (WAF)
48
+ - **Firewall**: Sistema de firewall con listas blancas/negras y reglas personalizadas
49
+ - **TokenManager**: Gestión de tokens JWT con diferentes tipos de almacenamiento
50
+ - **AttackDetector**: Detector de patrones de ataque (SQL Injection, XSS, etc.)
51
+
52
+ ### 6. Sistema de Hooks
53
+
54
+ - Implementación completa del sistema de hooks y filtros similar al de WordPress
55
+ - Permite extensibilidad en todos los componentes del framework
56
+ - Soporta namespaces y prioridades para los hooks
57
+
58
+ ### 7. Sistemas de Carga
59
+
60
+ - **RouteLoader**: Carga de rutas desde archivos JSON
61
+ - **RouteDirectoryLoader**: Carga de rutas desde múltiples archivos JSON en un directorio
62
+ - **ControllerLoader**: Carga dinámica de controladores desde archivos
63
+
64
+ ### 8. Utilidades
65
+
66
+ - **Logger**: Sistema de logging estructurado con diferentes niveles y formatos
67
+ - **ErrorHandler**: Manejo centralizado de errores con soporte para diferentes tipos de excepciones
68
+ - **ConfigParser**: Parser de configuración desde archivos JSON y variables de entorno
69
+ - **MimeType**: Sistema de detección de tipos MIME
70
+
71
+ ## Características Destacadas
72
+
73
+ 1. **Arquitectura Modular**: Componentes independientes para mayor flexibilidad
74
+ 2. **Seguridad Avanzada**: Múltiples capas de seguridad incluyendo WAF
75
+ 3. **Sistema de Hooks**: Extensibilidad similar al sistema de WordPress
76
+ 4. **Autenticación Flexible**: Soporte para múltiples métodos de autenticación
77
+ 5. **Almacenamiento de Tokens**: Soporte para memoria, JSON, SQLite y MariaDB
78
+ 6. **Enrutamiento Avanzado**: Soporte para rutas parametrizadas, anidadas y estáticas
79
+ 7. **Soporte para Frontend**: Capacidad de servir contenido HTML y otros tipos de contenido
80
+ 8. **Sistema de Sesiones**: Gestión completa de sesiones con soporte para autenticación
81
+ 9. **Motor de Plantillas MVC**: Sistema profesional de vistas con soporte para filtros, helpers y hooks
82
+ 10. **Arquitectura de Modelos Completa (MVC)**: Capa de modelos para la lógica de negocio y acceso a datos
83
+ 11. **Sistema de Adaptadores de Base de Datos**: Soporte para múltiples motores de base de datos
84
+ 12. **Compatible con qbuilderjs**: Integración con QueryBuilder externo para construir consultas SQL
85
+
86
+ ## Estructura de Directorios
87
+
88
+ - `lib/`: Código fuente principal del framework
89
+ - `core/`: Componentes fundamentales (servidor, router, hooks)
90
+ - `loader/`: Componentes de carga (rutas, controladores)
91
+ - `middleware/`: Middlewares de seguridad y funcionalidad
92
+ - `mvc/`: Componentes MVC (controladores, modelos, vistas)
93
+ - `router/`: Componentes de enrutamiento
94
+ - `utils/`: Utilidades (logging, manejo de errores, etc.)
95
+
96
+ ## Dependencias
97
+
98
+ - `bcrypt`: Para hashing de contraseñas
99
+ - `jsonwebtoken`: Para tokens JWT
100
+ - `mariadb`: Para conexión con bases de datos MariaDB/MySQL
101
+ - `sqlite3`: Para conexión con bases de datos SQLite
102
+ - `qbuilderjs`: Para construcción de consultas SQL seguras
103
+
104
+ ## Patrones de Diseño
105
+
106
+ - **Singleton**: Para componentes centrales como el sistema de hooks
107
+ - **Factory**: Para creación de instancias de modelos y adaptadores
108
+ - **Strategy**: Para diferentes estrategias de autenticación
109
+ - **Observer**: A través del sistema de hooks para extensibilidad
110
+ - **MVC**: Arquitectura modelo-vista-controlador para la separación de responsabilidades
111
+
112
+ ## Funcionalidades Avanzadas
113
+
114
+ ### Sistema de Hooks y Filtros
115
+
116
+ El framework incluye un sistema completo de hooks y filtros similar al de WordPress, que permite extender la funcionalidad en diferentes puntos del ciclo de vida de la aplicación:
117
+
118
+ ```javascript
119
+ const { hooks } = require('jerkjs');
120
+
121
+ // Registrar una acción
122
+ hooks.addAction('firewall_request_blocked', (rule, clientIP, req, res) => {
123
+ console.log(`Solicitud bloqueada: ${rule.name} para IP: ${clientIP}`);
124
+ });
125
+
126
+ // Registrar un filtro
127
+ hooks.addFilter('session_create_data', (userData, req) => {
128
+ return {
129
+ ...userData,
130
+ ipAddress: req.headers['x-forwarded-for'] || req.connection.remoteAddress,
131
+ createdAt: new Date().toISOString()
132
+ };
133
+ });
134
+ ```
135
+
136
+ ### Motor de Plantillas
137
+
138
+ El motor de plantillas profesional incluye soporte para:
139
+
140
+ - Variables: `{{variable}}`
141
+ - Condiciones: `{{if variable}}contenido{{endif}}`
142
+ - Bucles: `{{foreach:array}}contenido{{endforeach}}`
143
+ - Inclusiones: `{{include:header}}`
144
+ - Filtros: `{{variable|upper}}`
145
+ - Helpers personalizados
146
+
147
+ ### Sistema de Modelos
148
+
149
+ La arquitectura de modelos completa permite:
150
+
151
+ - Encapsular la lógica de negocio y el acceso a datos
152
+ - Utilizar diferentes adaptadores de base de datos
153
+ - Implementar operaciones CRUD estándar
154
+ - Extender con métodos personalizados
155
+
156
+ ## Conclusión
157
+
158
+ Este framework está diseñado para proporcionar una solución completa para el desarrollo de aplicaciones web seguras y escalables, con una arquitectura modular que permite extender su funcionalidad a través del sistema de hooks y una sólida capa de seguridad que incluye WAF, autenticación multifactor y protección contra ataques comunes.
159
+
160
+ La arquitectura modular y el sistema de hooks hacen que JERK sea altamente personalizable y adaptable a diferentes necesidades de desarrollo, mientras que su enfoque en la seguridad y el patrón MVC proporcionan una base sólida para construir aplicaciones robustas y mantenibles.
161
+
162
+ ## Consideraciones de Seguridad Adicionales
163
+
164
+ ### Seguridad de Cookies en el Sistema de Sesiones
165
+
166
+ Tras un análisis detallado del código de JERK Framework, se ha identificado que el sistema de sesiones implementado en `lib/middleware/session.js` presenta algunas deficiencias en cuanto a la seguridad de las cookies:
167
+
168
+ #### Flags de Seguridad Implementadas:
169
+
170
+ 1. **HttpOnly**:
171
+ - Esta flag está presente en ambas configuraciones de cookie (creación y destrucción)
172
+ - **Propósito**: Previene ataques de secuestro de sesión mediante XSS (Cross-Site Scripting)
173
+ - **Funcionamiento**: Impide que el código JavaScript del lado del cliente acceda al valor de la cookie a través de document.cookie
174
+ - **Implementación en JERK**: Se aplica sistemáticamente en todas las operaciones de cookie de sesión
175
+
176
+ #### Flags de Seguridad Ausentes:
177
+
178
+ 2. **Secure**:
179
+ - **NO ESTÁ IMPLEMENTADA** en la configuración actual de cookies en JERK
180
+ - **Propósito**: Asegura que la cookie solo se transmita a través de conexiones HTTPS cifradas
181
+ - **Importancia**: Crítica para prevenir el robo de cookies en redes inseguras
182
+ - **Falta en JERK**: El framework no incluye esta flag, lo que representa un riesgo de seguridad en entornos HTTPS
183
+
184
+ 3. **SameSite**:
185
+ - **NO ESTÁ IMPLEMENTADA** en la configuración actual de cookies en JERK
186
+ - **Propósito**: Previene ataques de falsificación de solicitudes entre sitios (CSRF)
187
+ - **Valores posibles**:
188
+ - `Strict`: La cookie solo se envía en contextos de primer nivel (mismo sitio)
189
+ - `Lax`: La cookie se envía en solicitudes de navegación de alto nivel (links, etc.)
190
+ - `None`: La cookie se envía en todos los contextos (requiere Secure)
191
+ - **Importancia**: Fundamental para la protección contra CSRF
192
+ - **Falta en JERK**: El framework no incluye esta protección
193
+
194
+ #### Recomendaciones de Mejora:
195
+
196
+ Para mejorar la seguridad del sistema de sesiones, se deberían considerar las siguientes modificaciones:
197
+
198
+ 1. **Agregar detección automática de HTTPS**:
199
+ ```javascript
200
+ let cookieFlags = 'HttpOnly; Path=/';
201
+ if (req.connection.encrypted || req.headers['x-forwarded-proto'] === 'https') {
202
+ cookieFlags += '; Secure';
203
+ }
204
+ cookieFlags += '; SameSite=Lax';
205
+ res.setHeader('Set-Cookie', `${this.cookieName}=${newSessionId}; ${cookieFlags}; Max-Age=${this.timeout / 1000}`);
206
+ ```
207
+
208
+ 2. **Permitir configuración personalizada**:
209
+ - Opciones para SameSite (Lax, Strict, None)
210
+ - Configuración de Path personalizable
211
+ - Soporte para dominios cruzados si es necesario
212
+
213
+ La implementación actual en JERK Framework proporciona la protección básica con HttpOnly, pero carece de las flags Secure y SameSite que son esenciales para una seguridad completa en aplicaciones web modernas. Estas deficiencias deben abordarse para cumplir con los estándares de seguridad actuales.