GuardianUnivalle-Benito-Yucra 0.1.70__py3-none-any.whl → 0.1.71__py3-none-any.whl
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.
Potentially problematic release.
This version of GuardianUnivalle-Benito-Yucra might be problematic. Click here for more details.
- GuardianUnivalle_Benito_Yucra/detectores/detector_sql.py +0 -11
- GuardianUnivalle_Benito_Yucra/detectores/detector_xss.py +2 -11
- guardianunivalle_benito_yucra-0.1.71.dist-info/METADATA +265 -0
- {guardianunivalle_benito_yucra-0.1.70.dist-info → guardianunivalle_benito_yucra-0.1.71.dist-info}/RECORD +7 -7
- guardianunivalle_benito_yucra-0.1.70.dist-info/METADATA +0 -192
- {guardianunivalle_benito_yucra-0.1.70.dist-info → guardianunivalle_benito_yucra-0.1.71.dist-info}/WHEEL +0 -0
- {guardianunivalle_benito_yucra-0.1.70.dist-info → guardianunivalle_benito_yucra-0.1.71.dist-info}/licenses/LICENSE +0 -0
- {guardianunivalle_benito_yucra-0.1.70.dist-info → guardianunivalle_benito_yucra-0.1.71.dist-info}/top_level.txt +0 -0
|
@@ -141,12 +141,6 @@ def get_client_ip(request):
|
|
|
141
141
|
# Extraer payload de la solicitud - MEJORADO PARA ANÁLISIS POR CAMPO
|
|
142
142
|
# ----------------------------
|
|
143
143
|
def extract_payload_as_map(request) -> Dict[str, Any]:
|
|
144
|
-
"""
|
|
145
|
-
Extrae un diccionario con los datos a analizar:
|
|
146
|
-
- Si JSON: devuelve el dict JSON.
|
|
147
|
-
- Si form-data: devuelve request.POST.dict()
|
|
148
|
-
- Si otro: devuelve {'raw': <texto>}
|
|
149
|
-
"""
|
|
150
144
|
try:
|
|
151
145
|
ct = request.META.get("CONTENT_TYPE", "")
|
|
152
146
|
if "application/json" in ct:
|
|
@@ -223,26 +217,21 @@ class SQLIDefenseMiddleware(MiddlewareMixin):
|
|
|
223
217
|
|
|
224
218
|
if client_ip in trusted_ips:
|
|
225
219
|
return None
|
|
226
|
-
|
|
227
220
|
referer = request.META.get("HTTP_REFERER", "")
|
|
228
221
|
host = request.get_host()
|
|
229
222
|
if any(url in referer for url in trusted_urls) or any(url in host for url in trusted_urls):
|
|
230
223
|
return None
|
|
231
|
-
|
|
232
224
|
# Extraer datos como mapa para análisis por campo
|
|
233
225
|
data = extract_payload_as_map(request)
|
|
234
226
|
qs = request.META.get("QUERY_STRING", "")
|
|
235
227
|
if qs:
|
|
236
228
|
data["_query_string"] = qs
|
|
237
|
-
|
|
238
229
|
if not data:
|
|
239
230
|
return None
|
|
240
|
-
|
|
241
231
|
total_score = 0.0
|
|
242
232
|
all_descriptions = []
|
|
243
233
|
all_matches = []
|
|
244
234
|
payload_summary = []
|
|
245
|
-
|
|
246
235
|
# Analizar campo por campo - AHORA SIN DESCUENTO PARA ROBUSTEZ
|
|
247
236
|
if isinstance(data, dict):
|
|
248
237
|
for key, value in data.items():
|
|
@@ -116,6 +116,7 @@ XSS_DEFENSE_THRESHOLD = getattr(settings, "XSS_DEFENSE_THRESHOLD", 0.6)
|
|
|
116
116
|
# -------------------------------------------------
|
|
117
117
|
# Util: validación / extracción de IP (robusta)
|
|
118
118
|
# -------------------------------------------------
|
|
119
|
+
|
|
119
120
|
def _is_valid_ip(ip: str) -> bool:
|
|
120
121
|
"""Verifica que la cadena sea una IP válida (v4 o v6)."""
|
|
121
122
|
try:
|
|
@@ -229,14 +230,6 @@ def detect_xss_in_value(value: str, is_sensitive: bool = False) -> Tuple[float,
|
|
|
229
230
|
# Middleware principal XSS - MEJORADO PARA ROBUSTEZ
|
|
230
231
|
# -------------------------------------------------
|
|
231
232
|
class XSSDefenseMiddleware(MiddlewareMixin):
|
|
232
|
-
"""
|
|
233
|
-
Middleware para detección XSS - Versión Robusta.
|
|
234
|
-
- Analiza TODO el body (campo por campo) y querystring.
|
|
235
|
-
- Campos sensibles se analizan con descuento en score para evitar falsos positivos.
|
|
236
|
-
- Usa bleach si disponible para sanitización.
|
|
237
|
-
- Añade request.xss_attack_info con: ip, tipos, descripcion, payload, score, url.
|
|
238
|
-
"""
|
|
239
|
-
|
|
240
233
|
def process_request(self, request):
|
|
241
234
|
# 1) IP y exclusiones
|
|
242
235
|
client_ip = get_client_ip(request)
|
|
@@ -321,9 +314,7 @@ class XSSDefenseMiddleware(MiddlewareMixin):
|
|
|
321
314
|
"payload": payload_for_request,
|
|
322
315
|
"score": score_rounded,
|
|
323
316
|
"url": url,
|
|
324
|
-
}
|
|
325
|
-
|
|
326
|
-
|
|
317
|
+
}
|
|
327
318
|
# 7) NO bloquear aquí — lo hace AuditoriaMiddleware según su política
|
|
328
319
|
return None
|
|
329
320
|
|
|
@@ -0,0 +1,265 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: GuardianUnivalle-Benito-Yucra
|
|
3
|
+
Version: 0.1.71
|
|
4
|
+
Summary: Middleware y detectores de seguridad (SQLi, XSS, CSRF, DoS) para Django/Flask
|
|
5
|
+
Author-email: Andres Benito Calle Yucra <benitoandrescalle035@gmail.com>
|
|
6
|
+
License: MIT
|
|
7
|
+
Project-URL: Homepage, https://pypi.org/project/guardianunivalle-benito-yucra/
|
|
8
|
+
Project-URL: Bug_Tracker, https://github.com/Andyyupy/guardianunivalle-benito-yucra/issues
|
|
9
|
+
Keywords: security,django,flask,sqli,xss,csrf,middleware
|
|
10
|
+
Classifier: Development Status :: 3 - Alpha
|
|
11
|
+
Classifier: Intended Audience :: Developers
|
|
12
|
+
Classifier: Topic :: Security
|
|
13
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
14
|
+
Classifier: Programming Language :: Python :: 3
|
|
15
|
+
Classifier: Framework :: Django
|
|
16
|
+
Classifier: Framework :: Flask
|
|
17
|
+
Requires-Python: >=3.8
|
|
18
|
+
Description-Content-Type: text/markdown
|
|
19
|
+
License-File: LICENSE
|
|
20
|
+
Requires-Dist: redis>=4.0
|
|
21
|
+
Requires-Dist: django>=3.2
|
|
22
|
+
Dynamic: license-file
|
|
23
|
+
|
|
24
|
+
<!-- Información de la librería -->
|
|
25
|
+
<table align="center" style="width: 100%; text-align: center; border-collapse: collapse; background-color: #f4f4f9; border-radius: 15px; box-shadow: 0 4px 10px rgba(0, 0, 0, 0.1); padding: 20px;">
|
|
26
|
+
<tr>
|
|
27
|
+
<td style="border: none; padding: 10px 20px;">
|
|
28
|
+
<img src="https://res.cloudinary.com/dsbgmboh1/image/upload/v1761866594/Andres_Benito_Calle_Yucra_nxyqee.png"
|
|
29
|
+
alt="Univalle Logo" width="300"
|
|
30
|
+
style="transition: transform 0.3s ease-in-out;"
|
|
31
|
+
onmouseover="this.style.transform='scale(1.1)'"
|
|
32
|
+
onmouseout="this.style.transform='scale(1)'">
|
|
33
|
+
</td>
|
|
34
|
+
<td style="border: none; padding: 10px 20px; text-align: center;">
|
|
35
|
+
<h1 style="font-size: 50px; margin: 0; color: #c62828; font-family: 'Arial', sans-serif; text-shadow: 2px 2px 4px rgba(0, 0, 0, 0.3);">
|
|
36
|
+
Guardian Univalle Benito Yucra
|
|
37
|
+
</h1>
|
|
38
|
+
<p style="margin: 5px 0 0 0; font-size: 18px; color: #444; font-family: 'Segoe UI', sans-serif;">
|
|
39
|
+
Framework de detección y defensa de amenazas web para Django.
|
|
40
|
+
</p>
|
|
41
|
+
</td>
|
|
42
|
+
<td style="border: none; padding: 10px 20px;">
|
|
43
|
+
<img src="https://res.cloudinary.com/dsbgmboh1/image/upload/v1761864884/GuardianUnivalle_imeegq.png"
|
|
44
|
+
alt="Django Logo" width="300"
|
|
45
|
+
style="transition: transform 0.3s ease-in-out;"
|
|
46
|
+
onmouseover="this.style.transform='scale(1.1)'"
|
|
47
|
+
onmouseout="this.style.transform='scale(1)'">
|
|
48
|
+
</td>
|
|
49
|
+
</tr>
|
|
50
|
+
</table>
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
`Guardian Univalle` es un sistema de seguridad modular desarrollado para fortalecer aplicaciones Django frente a ataques web comunes como **XSS**, **CSRF**, **inyección SQL**, **ataques DoS** y **scraping automatizado**.
|
|
54
|
+
Cada módulo opera mediante **middlewares independientes** que analizan el tráfico HTTP en tiempo real, aplican heurísticas inteligentes y registran eventos sospechosos para auditoría y bloqueo adaptativo.
|
|
55
|
+
|
|
56
|
+
---
|
|
57
|
+
## Arquitectura general
|
|
58
|
+
|
|
59
|
+
Guardian Univalle está diseñado bajo una **arquitectura modular y extensible**, donde cada tipo de amenaza se gestiona mediante un middleware especializado.
|
|
60
|
+
Cada middleware:
|
|
61
|
+
|
|
62
|
+
- Se ejecuta en la fase inicial del request (`process_request`).
|
|
63
|
+
- Analiza cabeceras, cuerpo y metadatos de la petición.
|
|
64
|
+
- Evalúa indicadores de ataque según patrones heurísticos y reglas configurables.
|
|
65
|
+
- Calcula una puntuación de riesgo (score) para cada evento.
|
|
66
|
+
- Anexa la información al objeto `request` (por ejemplo, `request.xss_attack_info`) para que otros módulos (como el de auditoría) la procesen.
|
|
67
|
+
|
|
68
|
+
---
|
|
69
|
+
|
|
70
|
+
## Módulos de defensa incluidos
|
|
71
|
+
|
|
72
|
+
### 1. CSRFDefenseMiddleware
|
|
73
|
+
**Defensa contra Cross-Site Request Forgery (CSRF)**
|
|
74
|
+
|
|
75
|
+
Este módulo detecta intentos de falsificación de peticiones mediante:
|
|
76
|
+
|
|
77
|
+
- Verificación de cabeceras **Origin** y **Referer** contra el host real.
|
|
78
|
+
- Validación de **tokens CSRF** en cookies, cabeceras o formularios.
|
|
79
|
+
- Análisis del **tipo de contenido** (`Content-Type`) y parámetros sensibles.
|
|
80
|
+
- Detección de peticiones JSON o formularios enviados desde dominios externos.
|
|
81
|
+
- Asignación de un **score de riesgo** proporcional al número y severidad de señales encontradas.
|
|
82
|
+
|
|
83
|
+
**Algoritmos utilizados:** heurísticas basadas en cabeceras HTTP, validación semántica de origen y detección de anomalías en métodos `POST`, `PUT`, `DELETE` y `PATCH`.
|
|
84
|
+
|
|
85
|
+
---
|
|
86
|
+
|
|
87
|
+
### 2. XSSDefenseMiddleware
|
|
88
|
+
**Defensa contra Cross-Site Scripting (XSS)**
|
|
89
|
+
|
|
90
|
+
Analiza los datos enviados en el cuerpo y querystring, detectando vectores de inyección HTML/JS mediante:
|
|
91
|
+
|
|
92
|
+
- Patrones de alto riesgo (`<script>`, `javascript:`, `onload=`, `eval()`).
|
|
93
|
+
- Ofuscaciones con entidades (`<`, `%3Cscript`).
|
|
94
|
+
- Detección de atributos de eventos (`onmouseover`, `onfocus`, etc.).
|
|
95
|
+
- Análisis de URIs maliciosas (`data:text/html`, `vbscript:`).
|
|
96
|
+
- Scoring ponderado por severidad (de 0.3 a 0.95).
|
|
97
|
+
|
|
98
|
+
**Algoritmos utilizados:** expresiones regulares avanzadas con pesos heurísticos y uso opcional de la librería **Bleach** para sanitización comparativa.
|
|
99
|
+
|
|
100
|
+
**Salida:** agrega `request.xss_attack_info` con los detalles de detección, IP de origen, descripción, payload y score total.
|
|
101
|
+
|
|
102
|
+
---
|
|
103
|
+
|
|
104
|
+
### 3. SQLIDefenseMiddleware
|
|
105
|
+
**Defensa contra Inyección SQL (SQLi)**
|
|
106
|
+
|
|
107
|
+
Identifica intentos de inyección SQL en parámetros enviados a través de:
|
|
108
|
+
|
|
109
|
+
- Palabras clave peligrosas (`UNION`, `SELECT`, `DROP`, `INSERT`, `UPDATE`).
|
|
110
|
+
- Uso de comentarios (`--`, `#`, `/* ... */`).
|
|
111
|
+
- Concatenaciones o subconsultas sospechosas.
|
|
112
|
+
- Comportamientos anómalos en parámetros GET, POST o JSON.
|
|
113
|
+
|
|
114
|
+
**Algoritmos utilizados:** heurísticas sintácticas + patrones combinados con contextos.
|
|
115
|
+
Evalúa combinaciones de operadores y palabras reservadas para minimizar falsos positivos.
|
|
116
|
+
|
|
117
|
+
**Resultado:** registra el intento en `request.sql_injection_info` con score calculado y parámetros comprometidos.
|
|
118
|
+
|
|
119
|
+
---
|
|
120
|
+
|
|
121
|
+
### 4. DOSDefenseMiddleware
|
|
122
|
+
**Detección de ataques de Denegación de Servicio (DoS)**
|
|
123
|
+
|
|
124
|
+
Monitorea la frecuencia de peticiones por IP y calcula una métrica adaptativa:
|
|
125
|
+
|
|
126
|
+
- Detecta exceso de solicitudes en intervalos cortos.
|
|
127
|
+
- Analiza `User-Agent`, patrones repetitivos y tamaño de payloads.
|
|
128
|
+
- Aplica límites configurables (`MAX_REQUESTS_PER_WINDOW`).
|
|
129
|
+
- Marca IPs sospechosas para registro y bloqueo temporal.
|
|
130
|
+
|
|
131
|
+
**Algoritmos utilizados:** Sliding Window con conteo adaptativo, controlado por señales de frecuencia e intensidad.
|
|
132
|
+
|
|
133
|
+
---
|
|
134
|
+
|
|
135
|
+
### 5. ScrapingDefenseMiddleware (opcional)
|
|
136
|
+
**Detección de scraping y bots automatizados**
|
|
137
|
+
|
|
138
|
+
Evalúa características típicas de scraping:
|
|
139
|
+
|
|
140
|
+
- User-Agent anómalo o ausente.
|
|
141
|
+
- Patrón de navegación repetitivo o excesivamente rápido.
|
|
142
|
+
- Ausencia de cabeceras humanas como `Accept-Language` o `Referer`.
|
|
143
|
+
- Combinación con heurísticas de DoS para detectar scrapers agresivos.
|
|
144
|
+
|
|
145
|
+
**Algoritmos utilizados:** análisis estadístico de cabeceras + patrones de comportamiento a corto plazo.
|
|
146
|
+
|
|
147
|
+
---
|
|
148
|
+
|
|
149
|
+
## Integración y uso
|
|
150
|
+
|
|
151
|
+
### Instalación
|
|
152
|
+
|
|
153
|
+
```bash
|
|
154
|
+
pip install guardian-univalle
|
|
155
|
+
```
|
|
156
|
+
### Configuración en settings.py
|
|
157
|
+
|
|
158
|
+
```bash
|
|
159
|
+
MIDDLEWARE = [
|
|
160
|
+
# Middlewares personalizados
|
|
161
|
+
"GuardianUnivalle_Benito_Yucra.detectores.detector_dos.DOSDefenseMiddleware",
|
|
162
|
+
"GuardianUnivalle_Benito_Yucra.detectores.detector_sql.SQLIDefenseMiddleware",
|
|
163
|
+
"GuardianUnivalle_Benito_Yucra.detectores.detector_xss.XSSDefenseMiddleware",
|
|
164
|
+
"GuardianUnivalle_Benito_Yucra.detectores.detector_csrf.CSRFDefenseMiddleware",
|
|
165
|
+
"users.middleware.AuditoriaMiddleware",
|
|
166
|
+
"users.auditoria_servidor.AuditoriaServidorMiddleware",
|
|
167
|
+
]
|
|
168
|
+
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
```bash
|
|
172
|
+
ALLOWED_HOSTS = [
|
|
173
|
+
"192.168.0.3",
|
|
174
|
+
"127.0.0.1",
|
|
175
|
+
"localhost",
|
|
176
|
+
]
|
|
177
|
+
|
|
178
|
+
```
|
|
179
|
+
### Parámetros de defensa avanzada
|
|
180
|
+
|
|
181
|
+
```bash
|
|
182
|
+
# --- DoS Defense ---
|
|
183
|
+
DOS_LIMITE_PETICIONES = 120
|
|
184
|
+
DOS_VENTANA_SEGUNDOS = 60
|
|
185
|
+
DOS_PESO = 0.6
|
|
186
|
+
DOS_LIMITE_ENDPOINTS = 80
|
|
187
|
+
DOS_TIEMPO_BLOQUEO = 300
|
|
188
|
+
DOS_TRUSTED_IPS = ["127.0.0.1", "192.168.0.3"]
|
|
189
|
+
|
|
190
|
+
# Score total de bloqueo
|
|
191
|
+
DOS_PESO_BLACKLIST = 0.3
|
|
192
|
+
DOS_PESO_HEURISTICA = 0.1
|
|
193
|
+
DOS_UMBRAL_BLOQUEO = 0.8
|
|
194
|
+
|
|
195
|
+
# Configuración general
|
|
196
|
+
DOS_DEFENSE_MAX_REQUESTS = 100
|
|
197
|
+
DOS_DEFENSE_BLOCK_TIME = 300
|
|
198
|
+
DOS_DEFENSE_TRUSTED_IPS = ["127.0.0.1", "192.168.0.3"]
|
|
199
|
+
|
|
200
|
+
```
|
|
201
|
+
|
|
202
|
+
```bash
|
|
203
|
+
# --- SQL Injection Defense ---
|
|
204
|
+
SQLI_DEFENSE_TRUSTED_IPS = ["127.0.0.1", "192.168.0.3"]
|
|
205
|
+
|
|
206
|
+
# --- XSS Defense ---
|
|
207
|
+
XSS_DEFENSE_TRUSTED_IPS = ["127.0.0.1", "192.168.0.3"]
|
|
208
|
+
XSS_DEFENSE_SANITIZE_INPUT = False
|
|
209
|
+
XSS_DEFENSE_BLOCK = True
|
|
210
|
+
XSS_DEFENSE_EXCLUDED_PATHS = ["/health", "/internal"]
|
|
211
|
+
|
|
212
|
+
# --- CSRF Defense ---
|
|
213
|
+
CSRF_DEFENSE_TRUSTED_IPS = ["127.0.0.1", "192.168.0.3"]
|
|
214
|
+
CSRF_DEFENSE_BLOCK = True
|
|
215
|
+
CSRF_DEFENSE_LOG = True
|
|
216
|
+
|
|
217
|
+
```
|
|
218
|
+
### Auditoría y correlación de eventos
|
|
219
|
+
```bash
|
|
220
|
+
request.xss_attack_info = {
|
|
221
|
+
"ip": "192.168.1.10",
|
|
222
|
+
"tipos": ["XSS"],
|
|
223
|
+
"descripcion": ["Etiqueta <script> detectada"],
|
|
224
|
+
"payload": {"field": "comentario", "snippet": "<script>alert(1)</script>"},
|
|
225
|
+
"score": 0.92,
|
|
226
|
+
"url": "/comentarios/enviar/",
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
```
|
|
230
|
+
### Filosofía del proyecto
|
|
231
|
+
Guardian Univalle – Benito & Junkrat busca proporcionar una capa de defensa proactiva para entornos Django universitarios y empresariales, combinando:
|
|
232
|
+
|
|
233
|
+
#Detección heurística.
|
|
234
|
+
|
|
235
|
+
#Análisis semántico de cabeceras y payloads.
|
|
236
|
+
|
|
237
|
+
#Escalamiento de score basado en señales múltiples.
|
|
238
|
+
|
|
239
|
+
Su diseño es didáctico y extensible, ideal tanto para proyectos reales como para enseñanza de ciberseguridad aplicada.
|
|
240
|
+
---
|
|
241
|
+
### Estructura del paquete
|
|
242
|
+
```bash
|
|
243
|
+
guardian_univalle/
|
|
244
|
+
│
|
|
245
|
+
├── detectores/
|
|
246
|
+
│ ├── csrf_defense.py
|
|
247
|
+
│ ├── xss_defense.py
|
|
248
|
+
│ ├── sql_defense.py
|
|
249
|
+
│ ├── dos_defense.py
|
|
250
|
+
│ ├── scraping_defense.py
|
|
251
|
+
│
|
|
252
|
+
├── auditoria/
|
|
253
|
+
│ └── auditoria_middleware.py
|
|
254
|
+
│
|
|
255
|
+
└── __init__.py
|
|
256
|
+
|
|
257
|
+
```
|
|
258
|
+
### Licencia
|
|
259
|
+
Este proyecto se distribuye bajo la licencia MIT, permitiendo libre uso y modificación con atribución.
|
|
260
|
+
|
|
261
|
+
📘 Universidad Privada del Valle – Sede La Paz
|
|
262
|
+
|
|
263
|
+
👨💻 Desarrollado por: Benito Yucra
|
|
264
|
+
|
|
265
|
+
📅 Año: 2025
|
|
@@ -6,14 +6,14 @@ GuardianUnivalle_Benito_Yucra/criptografia/intercambio_claves.py,sha256=9djnlzb0
|
|
|
6
6
|
GuardianUnivalle_Benito_Yucra/criptografia/kdf.py,sha256=_sbepEY1qHEKga0ExrX2WRg1HeCPY5MC5CfXZWYyl-A,709
|
|
7
7
|
GuardianUnivalle_Benito_Yucra/detectores/detector_csrf.py,sha256=cVc5-rIwgOuFkov1tHtUR2PnyFdF3Ns6RvJMq4hkuOU,12486
|
|
8
8
|
GuardianUnivalle_Benito_Yucra/detectores/detector_dos.py,sha256=Jy4fhI-6n9wQR0quzpondcUyCA2447lDq4fmOFeM1jA,14989
|
|
9
|
-
GuardianUnivalle_Benito_Yucra/detectores/detector_sql.py,sha256=
|
|
10
|
-
GuardianUnivalle_Benito_Yucra/detectores/detector_xss.py,sha256=
|
|
9
|
+
GuardianUnivalle_Benito_Yucra/detectores/detector_sql.py,sha256=9UZFr68WqzZ7LxouY-4fPkzNWJGcrrB8HDEKUqwP_KQ,14765
|
|
10
|
+
GuardianUnivalle_Benito_Yucra/detectores/detector_xss.py,sha256=azK7pTnO7fxcClEEDoLVBdvWF-hQAvM5KElg9O6Ohkc,14963
|
|
11
11
|
GuardianUnivalle_Benito_Yucra/middleware_web/middleware_web.py,sha256=23pLLYqliUoMrIC6ZEwz3hKXeDjWfHSm9vYPWGmDDik,495
|
|
12
12
|
GuardianUnivalle_Benito_Yucra/mitigacion/limitador_peticion.py,sha256=ipMOebYhql-6mSyHs0ddYXOcXq9w8P_IXLlpiIqGncw,246
|
|
13
13
|
GuardianUnivalle_Benito_Yucra/mitigacion/lista_bloqueo.py,sha256=6AYWII4mrmwCLHCvGTyoBxR4Oasr4raSHpFbVjqn7d8,193
|
|
14
14
|
GuardianUnivalle_Benito_Yucra/puntuacion/puntuacion_amenaza.py,sha256=Wx5XfcII4oweLvZsTBEJ7kUc9pMpP5-36RfI5C5KJXo,561
|
|
15
|
-
guardianunivalle_benito_yucra-0.1.
|
|
16
|
-
guardianunivalle_benito_yucra-0.1.
|
|
17
|
-
guardianunivalle_benito_yucra-0.1.
|
|
18
|
-
guardianunivalle_benito_yucra-0.1.
|
|
19
|
-
guardianunivalle_benito_yucra-0.1.
|
|
15
|
+
guardianunivalle_benito_yucra-0.1.71.dist-info/licenses/LICENSE,sha256=5e4IdL542v1E8Ft0A24GZjrxZeTsVK7XrS3mZEUhPtM,37
|
|
16
|
+
guardianunivalle_benito_yucra-0.1.71.dist-info/METADATA,sha256=62MKAtQZZ5gi7qyui4-rDZ5sLXyHaS12MvmLWnWBZlQ,9984
|
|
17
|
+
guardianunivalle_benito_yucra-0.1.71.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
18
|
+
guardianunivalle_benito_yucra-0.1.71.dist-info/top_level.txt,sha256=HTWfZM64WAV_QYr5cnXnLuabQt92dvlxqlR3pCwpbDQ,30
|
|
19
|
+
guardianunivalle_benito_yucra-0.1.71.dist-info/RECORD,,
|
|
@@ -1,192 +0,0 @@
|
|
|
1
|
-
Metadata-Version: 2.4
|
|
2
|
-
Name: GuardianUnivalle-Benito-Yucra
|
|
3
|
-
Version: 0.1.70
|
|
4
|
-
Summary: Middleware y detectores de seguridad (SQLi, XSS, CSRF, DoS) para Django/Flask
|
|
5
|
-
Author-email: Andres Benito Calle Yucra <benitoandrescalle035@gmail.com>
|
|
6
|
-
License: MIT
|
|
7
|
-
Project-URL: Homepage, https://pypi.org/project/guardianunivalle-benito-yucra/
|
|
8
|
-
Project-URL: Bug_Tracker, https://github.com/Andyyupy/guardianunivalle-benito-yucra/issues
|
|
9
|
-
Keywords: security,django,flask,sqli,xss,csrf,middleware
|
|
10
|
-
Classifier: Development Status :: 3 - Alpha
|
|
11
|
-
Classifier: Intended Audience :: Developers
|
|
12
|
-
Classifier: Topic :: Security
|
|
13
|
-
Classifier: License :: OSI Approved :: MIT License
|
|
14
|
-
Classifier: Programming Language :: Python :: 3
|
|
15
|
-
Classifier: Framework :: Django
|
|
16
|
-
Classifier: Framework :: Flask
|
|
17
|
-
Requires-Python: >=3.8
|
|
18
|
-
Description-Content-Type: text/markdown
|
|
19
|
-
License-File: LICENSE
|
|
20
|
-
Requires-Dist: redis>=4.0
|
|
21
|
-
Requires-Dist: django>=3.2
|
|
22
|
-
Dynamic: license-file
|
|
23
|
-
|
|
24
|
-
<!-- Información de la librería -->
|
|
25
|
-
|
|
26
|
-
# 🛡️ Guardian Univalle – Benito & Junkrat
|
|
27
|
-
|
|
28
|
-
Framework de detección y defensa de amenazas web para Django y Flask
|
|
29
|
-
|
|
30
|
-
Guardian Univalle es un sistema de seguridad modular desarrollado para fortalecer aplicaciones Django frente a ataques web comunes como XSS, CSRF, inyección SQL, ataques DoS y scraping automatizado.
|
|
31
|
-
Cada módulo opera mediante middleware independientes que analizan el tráfico HTTP en tiempo real, aplican heurísticas inteligentes y registran eventos sospechosos para auditoría y bloqueo adaptativo.
|
|
32
|
-
|
|
33
|
-
⚙️ Arquitectura general
|
|
34
|
-
|
|
35
|
-
Guardian Univalle está diseñado bajo una arquitectura modular y extensible, donde cada tipo de amenaza se gestiona mediante un middleware especializado.
|
|
36
|
-
Cada middleware:
|
|
37
|
-
|
|
38
|
-
- Se ejecuta en la fase inicial del request (process_request).
|
|
39
|
-
- Analiza cabeceras, cuerpo y metadatos de la petición.
|
|
40
|
-
- Evalúa indicadores de ataque según patrones heurísticos y reglas configurables.
|
|
41
|
-
- Calcula una puntuación de riesgo (score) para cada evento.
|
|
42
|
-
- Anexa la información al objeto request (por ejemplo, request.xss_attack_info) para que otros módulos (como el de auditoría) la procesen.
|
|
43
|
-
|
|
44
|
-
🧩 Módulos de defensa incluidos
|
|
45
|
-
|
|
46
|
-
1. 🔐 CSRFDefenseMiddleware
|
|
47
|
-
|
|
48
|
-
Defensa contra Cross-Site Request Forgery (CSRF).
|
|
49
|
-
|
|
50
|
-
Este módulo detecta intentos de falsificación de peticiones mediante:
|
|
51
|
-
|
|
52
|
-
- Verificación de cabeceras Origin y Referer contra el host real.
|
|
53
|
-
- Validación de tokens CSRF en cookies, cabeceras o formularios.
|
|
54
|
-
- Análisis del tipo de contenido (Content-Type) y parámetros sensibles.
|
|
55
|
-
- Detección de peticiones JSON o formularios enviados desde dominios externos.
|
|
56
|
-
- Asignación de un score de riesgo proporcional al número y severidad de señales encontradas.
|
|
57
|
-
|
|
58
|
-
Algoritmos utilizados:
|
|
59
|
-
Heurísticas basadas en cabeceras HTTP, validación semántica de origen, y detección de anomalías en métodos POST, PUT, DELETE y PATCH.
|
|
60
|
-
|
|
61
|
-
2. 🧬 XSSDefenseMiddleware
|
|
62
|
-
|
|
63
|
-
Defensa contra Cross-Site Scripting (XSS).
|
|
64
|
-
|
|
65
|
-
Analiza en profundidad los datos enviados en el cuerpo y querystring, detectando vectores de inyección HTML/JS mediante:
|
|
66
|
-
|
|
67
|
-
- Patrones de alto riesgo (<script>, javascript:, onload=, eval()).
|
|
68
|
-
- Ofuscaciones con entidades (<, %3Cscript).
|
|
69
|
-
- Detección de atributos de eventos (onmouseover, onfocus, etc.).
|
|
70
|
-
- Análisis de URIs maliciosas (data:text/html, vbscript:).
|
|
71
|
-
- Scoring ponderado por severidad (de 0.3 a 0.95).
|
|
72
|
-
|
|
73
|
-
Algoritmos utilizados:
|
|
74
|
-
Detección basada en expresiones regulares avanzadas con pesos heurísticos y uso opcional de la librería Bleach para sanitización comparativa.
|
|
75
|
-
|
|
76
|
-
Salida:
|
|
77
|
-
Agrega request.xss_attack_info con los detalles de detección, la IP de origen, descripción, payload y score total.
|
|
78
|
-
|
|
79
|
-
3. 💾 SQLIDefenseMiddleware
|
|
80
|
-
|
|
81
|
-
Defensa contra Inyección SQL (SQLi).
|
|
82
|
-
|
|
83
|
-
Identifica intentos de inyección SQL en los parámetros enviados a través de:
|
|
84
|
-
|
|
85
|
-
- Palabras clave peligrosas (UNION, SELECT, DROP, INSERT, UPDATE).
|
|
86
|
-
- Uso de comentarios (--, #, /_ ... _/).
|
|
87
|
-
- Concatenaciones o subconsultas sospechosas.
|
|
88
|
-
- Comportamientos anómalos en parámetros GET, POST o JSON.
|
|
89
|
-
|
|
90
|
-
Algoritmos utilizados:
|
|
91
|
-
Heurísticas sintácticas + patrones combinados con contextos.
|
|
92
|
-
Evalúa combinaciones de operadores y palabras reservadas para minimizar falsos positivos.
|
|
93
|
-
|
|
94
|
-
Resultado:
|
|
95
|
-
Registra el intento en request.sql_injection_info con score calculado y parámetros comprometidos.
|
|
96
|
-
|
|
97
|
-
4. 🌐 DOSDefenseMiddleware
|
|
98
|
-
|
|
99
|
-
Detección de ataques de Denegación de Servicio (DoS).
|
|
100
|
-
|
|
101
|
-
Monitorea la frecuencia de peticiones por IP y calcula una métrica adaptativa de comportamiento:
|
|
102
|
-
|
|
103
|
-
- Detecta exceso de solicitudes en intervalos cortos.
|
|
104
|
-
- Analiza User-Agent, patrones repetitivos y tamaño de payloads.
|
|
105
|
-
- Aplica límites configurables (MAX_REQUESTS_PER_WINDOW).
|
|
106
|
-
- Marca IPs sospechosas para registro y bloqueo temporal.
|
|
107
|
-
|
|
108
|
-
Algoritmos utilizados:
|
|
109
|
-
Sliding Window con conteo adaptativo en memoria, controlado por señales de frecuencia e intensidad.
|
|
110
|
-
|
|
111
|
-
5. 🕷️ ScrapingDefenseMiddleware (opcional)
|
|
112
|
-
|
|
113
|
-
Detección de scraping y bots automatizados.
|
|
114
|
-
|
|
115
|
-
Evalúa características típicas de scraping:
|
|
116
|
-
|
|
117
|
-
- User-Agent anómalo o ausente.
|
|
118
|
-
- Patrón de navegación repetitivo o excesivamente rápido.
|
|
119
|
-
- Ausencia de cabeceras humanas (como Accept-Language o Referer).
|
|
120
|
-
- Combinación con heurísticas de DoS para detectar scrapers agresivos.
|
|
121
|
-
|
|
122
|
-
Algoritmos utilizados:
|
|
123
|
-
Análisis estadístico de cabeceras + patrones de comportamiento a corto plazo.
|
|
124
|
-
|
|
125
|
-
🧠 Integración y uso
|
|
126
|
-
|
|
127
|
-
Instalar la librería:
|
|
128
|
-
|
|
129
|
-
pip install guardian-univalle
|
|
130
|
-
|
|
131
|
-
En tu archivo settings.py de Django, añadir los middlewares:
|
|
132
|
-
|
|
133
|
-
MIDDLEWARE = [
|
|
134
|
-
"guardian_univalle.detectores.csrf_defense.CSRFDefenseMiddleware",
|
|
135
|
-
"guardian_univalle.detectores.xss_defense.XSSDefenseMiddleware",
|
|
136
|
-
"guardian_univalle.detectores.sql_defense.SQLIDefenseMiddleware",
|
|
137
|
-
"guardian_univalle.detectores.dos_defense.DOSDefenseMiddleware",
|
|
138
|
-
"guardian_univalle.detectores.scraping_defense.ScrapingDefenseMiddleware", # opcional
|
|
139
|
-
]
|
|
140
|
-
|
|
141
|
-
(Opcional) Configurar umbrales en settings.py:
|
|
142
|
-
|
|
143
|
-
XSS_DEFENSE_THRESHOLD = 0.6
|
|
144
|
-
CSRF_DEFENSE_MIN_SIGNALS = 1
|
|
145
|
-
DOS_DEFENSE_MAX_REQUESTS = 100
|
|
146
|
-
SQLI_DEFENSE_THRESHOLD = 0.5
|
|
147
|
-
|
|
148
|
-
🧾 Auditoría y correlación de eventos
|
|
149
|
-
|
|
150
|
-
Cada middleware genera un diccionario con detalles de detección:
|
|
151
|
-
|
|
152
|
-
request.xss_attack_info = {
|
|
153
|
-
"ip": "192.168.1.10",
|
|
154
|
-
"tipos": ["XSS"],
|
|
155
|
-
"descripcion": ["Etiqueta <script> detectada"],
|
|
156
|
-
"payload": "{'field': 'comentario', 'snippet': '<script>alert(1)</script>'}",
|
|
157
|
-
"score": 0.92,
|
|
158
|
-
"url": "/comentarios/enviar/",
|
|
159
|
-
}
|
|
160
|
-
|
|
161
|
-
Estos datos pueden ser almacenados por un AuditoriaMiddleware o enviados a un sistema SIEM para correlación y respuesta automatizada.
|
|
162
|
-
|
|
163
|
-
🧩 Filosofía del proyecto
|
|
164
|
-
|
|
165
|
-
Guardian Univalle – Benito & Junkrat busca proporcionar una capa de defensa proactiva para entornos Django universitarios y empresariales, combinando:
|
|
166
|
-
|
|
167
|
-
Detección heurística,
|
|
168
|
-
|
|
169
|
-
Análisis semántico de cabeceras y payloads, y
|
|
170
|
-
|
|
171
|
-
Escalamiento de score basado en señales múltiples.
|
|
172
|
-
|
|
173
|
-
Su diseño es didáctico y extensible, ideal tanto para proyectos reales como para enseñanza de ciberseguridad aplicada.
|
|
174
|
-
|
|
175
|
-
🧱 Estructura del paquete
|
|
176
|
-
guardian_univalle/
|
|
177
|
-
│
|
|
178
|
-
├── detectores/
|
|
179
|
-
│ ├── csrf_defense.py
|
|
180
|
-
│ ├── xss_defense.py
|
|
181
|
-
│ ├── sql_defense.py
|
|
182
|
-
│ ├── dos_defense.py
|
|
183
|
-
│ ├── scraping_defense.py
|
|
184
|
-
│
|
|
185
|
-
├── auditoria/
|
|
186
|
-
│ └── auditoria_middleware.py
|
|
187
|
-
│
|
|
188
|
-
└── **init**.py
|
|
189
|
-
|
|
190
|
-
🧾 Licencia
|
|
191
|
-
|
|
192
|
-
Este proyecto se distribuye bajo la licencia MIT, permitiendo libre uso y modificación con atribución.
|
|
File without changes
|
|
File without changes
|
|
File without changes
|