GuardianUnivalle-Benito-Yucra 0.1.24__tar.gz → 0.1.26__tar.gz

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.

Files changed (25) hide show
  1. {guardianunivalle_benito_yucra-0.1.24 → guardianunivalle_benito_yucra-0.1.26}/GuardianUnivalle_Benito_Yucra/detectores/detector_sql.py +17 -44
  2. {guardianunivalle_benito_yucra-0.1.24 → guardianunivalle_benito_yucra-0.1.26}/GuardianUnivalle_Benito_Yucra.egg-info/PKG-INFO +1 -1
  3. {guardianunivalle_benito_yucra-0.1.24 → guardianunivalle_benito_yucra-0.1.26}/PKG-INFO +1 -1
  4. {guardianunivalle_benito_yucra-0.1.24 → guardianunivalle_benito_yucra-0.1.26}/pyproject.toml +1 -1
  5. {guardianunivalle_benito_yucra-0.1.24 → guardianunivalle_benito_yucra-0.1.26}/GuardianUnivalle_Benito_Yucra/__init__.py +0 -0
  6. {guardianunivalle_benito_yucra-0.1.24 → guardianunivalle_benito_yucra-0.1.26}/GuardianUnivalle_Benito_Yucra/auditoria/registro_auditoria.py +0 -0
  7. {guardianunivalle_benito_yucra-0.1.24 → guardianunivalle_benito_yucra-0.1.26}/GuardianUnivalle_Benito_Yucra/criptografia/cifrado_aead.py +0 -0
  8. {guardianunivalle_benito_yucra-0.1.24 → guardianunivalle_benito_yucra-0.1.26}/GuardianUnivalle_Benito_Yucra/criptografia/intercambio_claves.py +0 -0
  9. {guardianunivalle_benito_yucra-0.1.24 → guardianunivalle_benito_yucra-0.1.26}/GuardianUnivalle_Benito_Yucra/criptografia/kdf.py +0 -0
  10. {guardianunivalle_benito_yucra-0.1.24 → guardianunivalle_benito_yucra-0.1.26}/GuardianUnivalle_Benito_Yucra/detectores/detector_csrf.py +0 -0
  11. {guardianunivalle_benito_yucra-0.1.24 → guardianunivalle_benito_yucra-0.1.26}/GuardianUnivalle_Benito_Yucra/detectores/detector_dos.py +0 -0
  12. {guardianunivalle_benito_yucra-0.1.24 → guardianunivalle_benito_yucra-0.1.26}/GuardianUnivalle_Benito_Yucra/detectores/detector_keylogger.py +0 -0
  13. {guardianunivalle_benito_yucra-0.1.24 → guardianunivalle_benito_yucra-0.1.26}/GuardianUnivalle_Benito_Yucra/detectores/detector_xss.py +0 -0
  14. {guardianunivalle_benito_yucra-0.1.24 → guardianunivalle_benito_yucra-0.1.26}/GuardianUnivalle_Benito_Yucra/middleware_web/middleware_web.py +0 -0
  15. {guardianunivalle_benito_yucra-0.1.24 → guardianunivalle_benito_yucra-0.1.26}/GuardianUnivalle_Benito_Yucra/mitigacion/limitador_peticion.py +0 -0
  16. {guardianunivalle_benito_yucra-0.1.24 → guardianunivalle_benito_yucra-0.1.26}/GuardianUnivalle_Benito_Yucra/mitigacion/lista_bloqueo.py +0 -0
  17. {guardianunivalle_benito_yucra-0.1.24 → guardianunivalle_benito_yucra-0.1.26}/GuardianUnivalle_Benito_Yucra/puntuacion/puntuacion_amenaza.py +0 -0
  18. {guardianunivalle_benito_yucra-0.1.24 → guardianunivalle_benito_yucra-0.1.26}/GuardianUnivalle_Benito_Yucra/utilidades.py +0 -0
  19. {guardianunivalle_benito_yucra-0.1.24 → guardianunivalle_benito_yucra-0.1.26}/GuardianUnivalle_Benito_Yucra.egg-info/SOURCES.txt +0 -0
  20. {guardianunivalle_benito_yucra-0.1.24 → guardianunivalle_benito_yucra-0.1.26}/GuardianUnivalle_Benito_Yucra.egg-info/dependency_links.txt +0 -0
  21. {guardianunivalle_benito_yucra-0.1.24 → guardianunivalle_benito_yucra-0.1.26}/GuardianUnivalle_Benito_Yucra.egg-info/requires.txt +0 -0
  22. {guardianunivalle_benito_yucra-0.1.24 → guardianunivalle_benito_yucra-0.1.26}/GuardianUnivalle_Benito_Yucra.egg-info/top_level.txt +0 -0
  23. {guardianunivalle_benito_yucra-0.1.24 → guardianunivalle_benito_yucra-0.1.26}/LICENSE +0 -0
  24. {guardianunivalle_benito_yucra-0.1.24 → guardianunivalle_benito_yucra-0.1.26}/README.md +0 -0
  25. {guardianunivalle_benito_yucra-0.1.24 → guardianunivalle_benito_yucra-0.1.26}/setup.cfg +0 -0
@@ -60,71 +60,44 @@ def get_client_ip(request):
60
60
 
61
61
  class SQLIDefenseMiddleware(MiddlewareMixin):
62
62
  def process_request(self, request):
63
- # 1️⃣ Excluir rutas primero
64
- exempt_paths = getattr(settings, "SQLI_DEFENSE_EXEMPT_PATHS", [])
65
- if any(request.path.startswith(p) for p in exempt_paths):
66
- return None # No analizar payload
67
-
68
- # 2️⃣ Verificar si viene de un origin confiable (Netlify u otros frontends)
69
- trusted_origins = getattr(settings, "SQLI_DEFENSE_TRUSTED_ORIGINS", [])
70
- request_origin = request.META.get("HTTP_ORIGIN", "")
71
- if request_origin in trusted_origins:
72
- return None # Permitir solicitud confiable
73
-
74
- # 3️⃣ Verificar IP confiable
75
63
  client_ip = get_client_ip(request)
76
64
  trusted_ips = getattr(settings, "SQLI_DEFENSE_TRUSTED_IPS", [])
77
- if client_ip in trusted_ips:
78
- return None
65
+ trusted_domains = getattr(settings, "SQLI_DEFENSE_TRUSTED_DOMAINS", [])
79
66
 
80
- # 4️⃣ Analizar payload
81
- text = extract_payload_text(request)
82
- if not text:
67
+ # Si la IP está permitida → dejar pasar
68
+ if client_ip in trusted_ips:
83
69
  return None
84
70
 
85
- flagged, descripcion = detect_sql_attack(text)
86
- if flagged:
87
- request.sql_attack_info = {
88
- "ip": client_ip,
89
- "tipos": ["SQL"],
90
- "descripcion": descripcion,
91
- "payload": text,
92
- }
93
- logger.warning(
94
- f"Ataque SQL detectado desde IP {client_ip}, origin {request_origin}: {descripcion}, payload: {text}"
95
- )
96
-
97
- return None
71
+ # Revisar el dominio de origen
72
+ origin = request.META.get("HTTP_ORIGIN", "")
73
+ referer = request.META.get("HTTP_REFERER", "")
98
74
 
75
+ # extraemos solo el host (sin protocolo http/https)
76
+ def get_domain(url):
77
+ return url.replace("http://", "").replace("https://", "").split("/")[0]
99
78
 
100
- """ class SQLIDefenseMiddleware(MiddlewareMixin):
101
- def process_request(self, request):
102
- client_ip = get_client_ip(request)
103
- trusted_ips = getattr(settings, "SQLI_DEFENSE_TRUSTED_IPS", [])
104
- exempt_paths = getattr(settings, "SQLI_DEFENSE_EXEMPT_PATHS", [])
79
+ origin_domain = get_domain(origin) if origin else ""
80
+ referer_domain = get_domain(referer) if referer else ""
105
81
 
106
- if client_ip in trusted_ips:
107
- return None
108
- # 2️⃣ Permitir rutas exentas
109
- for path in exempt_paths:
110
- if request.path.startswith(path):
111
- return None
82
+ if origin_domain in trusted_domains or referer_domain in trusted_domains:
83
+ return None # → confiable, dejamos pasar
112
84
 
85
+ # 🔍 Analizamos payload
113
86
  text = extract_payload_text(request)
114
87
  if not text:
115
88
  return None
116
89
 
117
90
  flagged, descripcion = detect_sql_attack(text)
118
91
  if flagged:
119
- # Solo tipo SQL, descripción con los patrones detectados
120
92
  request.sql_attack_info = {
121
93
  "ip": client_ip,
122
94
  "tipos": ["SQL"],
123
95
  "descripcion": descripcion,
124
96
  "payload": text,
125
97
  }
98
+
126
99
  logger.warning(
127
100
  f"Ataque SQL detectado desde IP {client_ip}: {descripcion}, payload: {text}"
128
101
  )
129
- # No devolvemos JsonResponse, solo marcamos el ataque
130
- return None """
102
+
103
+ return None
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: GuardianUnivalle-Benito-Yucra
3
- Version: 0.1.24
3
+ Version: 0.1.26
4
4
  Summary: Middleware y detectores de seguridad (SQLi, XSS, CSRF, DoS, Keylogger) para Django/Flask
5
5
  Author-email: Andres Benito Calle Yucra <benitoandrescalle035@gmail.com>
6
6
  License: MIT
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: GuardianUnivalle-Benito-Yucra
3
- Version: 0.1.24
3
+ Version: 0.1.26
4
4
  Summary: Middleware y detectores de seguridad (SQLi, XSS, CSRF, DoS, Keylogger) para Django/Flask
5
5
  Author-email: Andres Benito Calle Yucra <benitoandrescalle035@gmail.com>
6
6
  License: MIT
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "GuardianUnivalle-Benito-Yucra" # usar mayúsculas consistente
7
- version = "0.1.24"
7
+ version = "0.1.26"
8
8
  description = "Middleware y detectores de seguridad (SQLi, XSS, CSRF, DoS, Keylogger) para Django/Flask"
9
9
  authors = [
10
10
  { name = "Andres Benito Calle Yucra", email = "benitoandrescalle035@gmail.com" }