sk-datafort 0.1.0__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.
- sk_datafort-0.1.0/PKG-INFO +64 -0
- sk_datafort-0.1.0/README.md +50 -0
- sk_datafort-0.1.0/pyproject.toml +25 -0
- sk_datafort-0.1.0/setup.cfg +4 -0
- sk_datafort-0.1.0/src/sk_datafort/__init__.py +3 -0
- sk_datafort-0.1.0/src/sk_datafort/detector.py +59 -0
- sk_datafort-0.1.0/src/sk_datafort/policy.py +20 -0
- sk_datafort-0.1.0/src/sk_datafort.egg-info/PKG-INFO +64 -0
- sk_datafort-0.1.0/src/sk_datafort.egg-info/SOURCES.txt +10 -0
- sk_datafort-0.1.0/src/sk_datafort.egg-info/dependency_links.txt +1 -0
- sk_datafort-0.1.0/src/sk_datafort.egg-info/requires.txt +1 -0
- sk_datafort-0.1.0/src/sk_datafort.egg-info/top_level.txt +1 -0
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: sk-datafort
|
|
3
|
+
Version: 0.1.0
|
|
4
|
+
Summary: Escudo de seguridad para aplicaciones con datos masivos frente a filtraciones y accesos anómalos.
|
|
5
|
+
Author-email: Santiago <santiago@tuemail.com>
|
|
6
|
+
Project-URL: Homepage, https://github.com
|
|
7
|
+
Classifier: Programming Language :: Python :: 3
|
|
8
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
9
|
+
Classifier: Operating System :: OS Independent
|
|
10
|
+
Classifier: Topic :: Security
|
|
11
|
+
Requires-Python: >=3.8
|
|
12
|
+
Description-Content-Type: text/markdown
|
|
13
|
+
Requires-Dist: cryptography>=42.0.0
|
|
14
|
+
|
|
15
|
+
# SK DataFort 🛡️
|
|
16
|
+
|
|
17
|
+
**SK DataFort** es una librería de Python de alta seguridad diseñada específicamente para aplicaciones que manejan miles o millones de registros (plataformas educativas, hospitales, universidades, comercios y servicios de IA).
|
|
18
|
+
|
|
19
|
+
Su objetivo no es solo evitar accesos no autorizados en la entrada, sino actuar como un escudo interno para impedir que errores de programación o fugas de credenciales expongan bases de datos masivas.
|
|
20
|
+
|
|
21
|
+
## 🚀 Funciones Principales
|
|
22
|
+
|
|
23
|
+
* **Detección de Contexto Anómalo:** Monitoreo en tiempo real de direcciones IP y dispositivos (*User-Agent*) para bloquear accesos sospechosos y mitigar secuestros de sesión.
|
|
24
|
+
* **Control de Políticas de Datos:** Restricción estricta de exportaciones masivas (*Anti-scraping*) y validación de límites de consumo por consulta.
|
|
25
|
+
* **Cifrado de Campos Sensibles:** Encriptación robusta a nivel de base de datos para proteger registros críticos.
|
|
26
|
+
* **Logs de Auditoría Automáticos:** Registro indestructible de anomalías e intentos de hackeo en archivos de seguridad local.
|
|
27
|
+
|
|
28
|
+
## 📦 Instalación (Modo Desarrollo)
|
|
29
|
+
|
|
30
|
+
Para clonar e instalar este escudo de seguridad de forma local en tus proyectos, ejecuta en tu terminal:
|
|
31
|
+
|
|
32
|
+
```bash
|
|
33
|
+
cd libreria
|
|
34
|
+
pip install -e .
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
## 💻 Ejemplo de Uso Rápido
|
|
38
|
+
|
|
39
|
+
Así de fácil es proteger tus endpoints contra cambios drásticos de dispositivo o IP:
|
|
40
|
+
|
|
41
|
+
```python
|
|
42
|
+
from sk_datafort import AnomalyDetector
|
|
43
|
+
|
|
44
|
+
detector = AnomalyDetector()
|
|
45
|
+
|
|
46
|
+
# Validar el ingreso del usuario legítimo
|
|
47
|
+
autorizado, mensaje = detector.verify_context(
|
|
48
|
+
user_id="user_123",
|
|
49
|
+
current_ip="192.168.1.50",
|
|
50
|
+
current_device="iPhone 15 Pro"
|
|
51
|
+
)
|
|
52
|
+
|
|
53
|
+
# Si un atacante intenta usar las credenciales desde otra IP/Dispositivo
|
|
54
|
+
bloqueado, mensaje = detector.verify_context(
|
|
55
|
+
user_id="user_123",
|
|
56
|
+
current_ip="185.45.22.10",
|
|
57
|
+
current_device="Windows Chrome"
|
|
58
|
+
)
|
|
59
|
+
# Retorna: False | Genera una alerta automática en 'seguridad_alertas.log'
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
## 📄 Licencia
|
|
63
|
+
|
|
64
|
+
Este proyecto está bajo la Licencia MIT.
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
# SK DataFort 🛡️
|
|
2
|
+
|
|
3
|
+
**SK DataFort** es una librería de Python de alta seguridad diseñada específicamente para aplicaciones que manejan miles o millones de registros (plataformas educativas, hospitales, universidades, comercios y servicios de IA).
|
|
4
|
+
|
|
5
|
+
Su objetivo no es solo evitar accesos no autorizados en la entrada, sino actuar como un escudo interno para impedir que errores de programación o fugas de credenciales expongan bases de datos masivas.
|
|
6
|
+
|
|
7
|
+
## 🚀 Funciones Principales
|
|
8
|
+
|
|
9
|
+
* **Detección de Contexto Anómalo:** Monitoreo en tiempo real de direcciones IP y dispositivos (*User-Agent*) para bloquear accesos sospechosos y mitigar secuestros de sesión.
|
|
10
|
+
* **Control de Políticas de Datos:** Restricción estricta de exportaciones masivas (*Anti-scraping*) y validación de límites de consumo por consulta.
|
|
11
|
+
* **Cifrado de Campos Sensibles:** Encriptación robusta a nivel de base de datos para proteger registros críticos.
|
|
12
|
+
* **Logs de Auditoría Automáticos:** Registro indestructible de anomalías e intentos de hackeo en archivos de seguridad local.
|
|
13
|
+
|
|
14
|
+
## 📦 Instalación (Modo Desarrollo)
|
|
15
|
+
|
|
16
|
+
Para clonar e instalar este escudo de seguridad de forma local en tus proyectos, ejecuta en tu terminal:
|
|
17
|
+
|
|
18
|
+
```bash
|
|
19
|
+
cd libreria
|
|
20
|
+
pip install -e .
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
## 💻 Ejemplo de Uso Rápido
|
|
24
|
+
|
|
25
|
+
Así de fácil es proteger tus endpoints contra cambios drásticos de dispositivo o IP:
|
|
26
|
+
|
|
27
|
+
```python
|
|
28
|
+
from sk_datafort import AnomalyDetector
|
|
29
|
+
|
|
30
|
+
detector = AnomalyDetector()
|
|
31
|
+
|
|
32
|
+
# Validar el ingreso del usuario legítimo
|
|
33
|
+
autorizado, mensaje = detector.verify_context(
|
|
34
|
+
user_id="user_123",
|
|
35
|
+
current_ip="192.168.1.50",
|
|
36
|
+
current_device="iPhone 15 Pro"
|
|
37
|
+
)
|
|
38
|
+
|
|
39
|
+
# Si un atacante intenta usar las credenciales desde otra IP/Dispositivo
|
|
40
|
+
bloqueado, mensaje = detector.verify_context(
|
|
41
|
+
user_id="user_123",
|
|
42
|
+
current_ip="185.45.22.10",
|
|
43
|
+
current_device="Windows Chrome"
|
|
44
|
+
)
|
|
45
|
+
# Retorna: False | Genera una alerta automática en 'seguridad_alertas.log'
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
## 📄 Licencia
|
|
49
|
+
|
|
50
|
+
Este proyecto está bajo la Licencia MIT.
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
[build-system]
|
|
2
|
+
requires = ["setuptools>=61.0"]
|
|
3
|
+
build-backend = "setuptools.build_meta"
|
|
4
|
+
|
|
5
|
+
[project]
|
|
6
|
+
name = "sk-datafort"
|
|
7
|
+
version = "0.1.0"
|
|
8
|
+
authors = [
|
|
9
|
+
{ name="Santiago", email="santiago@tuemail.com" },
|
|
10
|
+
]
|
|
11
|
+
description = "Escudo de seguridad para aplicaciones con datos masivos frente a filtraciones y accesos anómalos."
|
|
12
|
+
readme = "README.md"
|
|
13
|
+
requires-python = ">=3.8"
|
|
14
|
+
classifiers = [
|
|
15
|
+
"Programming Language :: Python :: 3",
|
|
16
|
+
"License :: OSI Approved :: MIT License",
|
|
17
|
+
"Operating System :: OS Independent",
|
|
18
|
+
"Topic :: Security",
|
|
19
|
+
]
|
|
20
|
+
dependencies = [
|
|
21
|
+
"cryptography>=42.0.0",
|
|
22
|
+
]
|
|
23
|
+
|
|
24
|
+
[project.urls]
|
|
25
|
+
"Homepage" = "https://github.com"
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import time
|
|
2
|
+
import logging
|
|
3
|
+
from dataclasses import dataclass
|
|
4
|
+
from typing import Dict, Tuple
|
|
5
|
+
|
|
6
|
+
# Configuración básica del sistema de logs de SK DataFort
|
|
7
|
+
logging.basicConfig(
|
|
8
|
+
filename="seguridad_alertas.log",
|
|
9
|
+
level=logging.WARNING,
|
|
10
|
+
format="%(asctime)s - [SK-DATAFORT] - %(levelname)s - %(message)s",
|
|
11
|
+
datefmt="%Y-%m-%d %H:%M:%S"
|
|
12
|
+
)
|
|
13
|
+
|
|
14
|
+
@dataclass
|
|
15
|
+
class DeviceContext:
|
|
16
|
+
ip: str
|
|
17
|
+
device_id: str
|
|
18
|
+
last_seen: float
|
|
19
|
+
|
|
20
|
+
class AnomalyDetector:
|
|
21
|
+
def __init__(self):
|
|
22
|
+
self.active_sessions: Dict[str, DeviceContext] = {}
|
|
23
|
+
self.blocked_users: Dict[str, float] = {}
|
|
24
|
+
|
|
25
|
+
def verify_context(self, user_id: str, current_ip: str, current_device: str) -> Tuple[bool, str]:
|
|
26
|
+
now = time.time()
|
|
27
|
+
|
|
28
|
+
if user_id in self.blocked_users:
|
|
29
|
+
if now - self.blocked_users[user_id] > 900:
|
|
30
|
+
del self.blocked_users[user_id]
|
|
31
|
+
else:
|
|
32
|
+
return False, "Usuario bloqueado por actividad sospechosa (Cambio de dispositivo no autorizado)."
|
|
33
|
+
|
|
34
|
+
if user_id not in self.active_sessions:
|
|
35
|
+
self.active_sessions[user_id] = DeviceContext(ip=current_ip, device_id=current_device, last_seen=now)
|
|
36
|
+
return True, "Acceso autorizado."
|
|
37
|
+
|
|
38
|
+
session = self.active_sessions[user_id]
|
|
39
|
+
|
|
40
|
+
# SI LAS HUELLAS DIGITALES NO COINCIDEN:
|
|
41
|
+
if session.ip != current_ip or session.device_id != current_device:
|
|
42
|
+
self.blocked_users[user_id] = now
|
|
43
|
+
|
|
44
|
+
# --- NUEVO: Guardamos el ataque en el registro oficial ---
|
|
45
|
+
alerta_msg = f"INTENTO DE HACKEO DETECTADO. Usuario: {user_id} intentó acceder desde IP: {current_ip} [{current_device}]. La sesión legítima pertenece a la IP: {session.ip} [{session.device_id}]."
|
|
46
|
+
logging.warning(alerta_msg)
|
|
47
|
+
|
|
48
|
+
return False, "ALERTA: Se detectó un cambio drástico de IP o dispositivo. Acceso congelado."
|
|
49
|
+
|
|
50
|
+
session.last_seen = now
|
|
51
|
+
return True, "Acceso autorizado."
|
|
52
|
+
|
|
53
|
+
def authorize_new_device(self, user_id: str, new_ip: str, new_device: str):
|
|
54
|
+
if user_id in self.blocked_users:
|
|
55
|
+
del self.blocked_users[user_id]
|
|
56
|
+
|
|
57
|
+
self.active_sessions[user_id] = DeviceContext(ip=new_ip, device_id=new_device, last_seen=time.time())
|
|
58
|
+
# Registramos que el cambio fue legal
|
|
59
|
+
logging.info(f"Usuario {user_id} actualizó exitosamente su dispositivo a IP: {new_ip}.")
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
from dataclasses import dataclass
|
|
2
|
+
|
|
3
|
+
@dataclass
|
|
4
|
+
class PolicyResult:
|
|
5
|
+
allowed: bool
|
|
6
|
+
reason: str
|
|
7
|
+
|
|
8
|
+
class DataPolicy:
|
|
9
|
+
def __init__(self, role: str, allow_read_own_records: bool = True, allow_bulk_export: bool = False, max_query_limit: int = 100):
|
|
10
|
+
self.role = role
|
|
11
|
+
self.allow_read_own_records = allow_read_own_records
|
|
12
|
+
self.allow_bulk_export = allow_bulk_export
|
|
13
|
+
self.max_query_limit = max_query_limit
|
|
14
|
+
|
|
15
|
+
def authorize(self, action: str, record_count: int = 1, is_owner: bool = False) -> PolicyResult:
|
|
16
|
+
if action in ["export_all_records", "bulk_export"] and not self.allow_bulk_export:
|
|
17
|
+
return PolicyResult(allowed=False, reason=f"El rol '{self.role}' tiene restringida la exportación masiva.")
|
|
18
|
+
if record_count > self.max_query_limit:
|
|
19
|
+
return PolicyResult(allowed=False, reason=f"Petición denegada: {record_count} registros exceden el límite.")
|
|
20
|
+
return PolicyResult(allowed=True, reason="Acción autorizada.")
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: sk-datafort
|
|
3
|
+
Version: 0.1.0
|
|
4
|
+
Summary: Escudo de seguridad para aplicaciones con datos masivos frente a filtraciones y accesos anómalos.
|
|
5
|
+
Author-email: Santiago <santiago@tuemail.com>
|
|
6
|
+
Project-URL: Homepage, https://github.com
|
|
7
|
+
Classifier: Programming Language :: Python :: 3
|
|
8
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
9
|
+
Classifier: Operating System :: OS Independent
|
|
10
|
+
Classifier: Topic :: Security
|
|
11
|
+
Requires-Python: >=3.8
|
|
12
|
+
Description-Content-Type: text/markdown
|
|
13
|
+
Requires-Dist: cryptography>=42.0.0
|
|
14
|
+
|
|
15
|
+
# SK DataFort 🛡️
|
|
16
|
+
|
|
17
|
+
**SK DataFort** es una librería de Python de alta seguridad diseñada específicamente para aplicaciones que manejan miles o millones de registros (plataformas educativas, hospitales, universidades, comercios y servicios de IA).
|
|
18
|
+
|
|
19
|
+
Su objetivo no es solo evitar accesos no autorizados en la entrada, sino actuar como un escudo interno para impedir que errores de programación o fugas de credenciales expongan bases de datos masivas.
|
|
20
|
+
|
|
21
|
+
## 🚀 Funciones Principales
|
|
22
|
+
|
|
23
|
+
* **Detección de Contexto Anómalo:** Monitoreo en tiempo real de direcciones IP y dispositivos (*User-Agent*) para bloquear accesos sospechosos y mitigar secuestros de sesión.
|
|
24
|
+
* **Control de Políticas de Datos:** Restricción estricta de exportaciones masivas (*Anti-scraping*) y validación de límites de consumo por consulta.
|
|
25
|
+
* **Cifrado de Campos Sensibles:** Encriptación robusta a nivel de base de datos para proteger registros críticos.
|
|
26
|
+
* **Logs de Auditoría Automáticos:** Registro indestructible de anomalías e intentos de hackeo en archivos de seguridad local.
|
|
27
|
+
|
|
28
|
+
## 📦 Instalación (Modo Desarrollo)
|
|
29
|
+
|
|
30
|
+
Para clonar e instalar este escudo de seguridad de forma local en tus proyectos, ejecuta en tu terminal:
|
|
31
|
+
|
|
32
|
+
```bash
|
|
33
|
+
cd libreria
|
|
34
|
+
pip install -e .
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
## 💻 Ejemplo de Uso Rápido
|
|
38
|
+
|
|
39
|
+
Así de fácil es proteger tus endpoints contra cambios drásticos de dispositivo o IP:
|
|
40
|
+
|
|
41
|
+
```python
|
|
42
|
+
from sk_datafort import AnomalyDetector
|
|
43
|
+
|
|
44
|
+
detector = AnomalyDetector()
|
|
45
|
+
|
|
46
|
+
# Validar el ingreso del usuario legítimo
|
|
47
|
+
autorizado, mensaje = detector.verify_context(
|
|
48
|
+
user_id="user_123",
|
|
49
|
+
current_ip="192.168.1.50",
|
|
50
|
+
current_device="iPhone 15 Pro"
|
|
51
|
+
)
|
|
52
|
+
|
|
53
|
+
# Si un atacante intenta usar las credenciales desde otra IP/Dispositivo
|
|
54
|
+
bloqueado, mensaje = detector.verify_context(
|
|
55
|
+
user_id="user_123",
|
|
56
|
+
current_ip="185.45.22.10",
|
|
57
|
+
current_device="Windows Chrome"
|
|
58
|
+
)
|
|
59
|
+
# Retorna: False | Genera una alerta automática en 'seguridad_alertas.log'
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
## 📄 Licencia
|
|
63
|
+
|
|
64
|
+
Este proyecto está bajo la Licencia MIT.
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
README.md
|
|
2
|
+
pyproject.toml
|
|
3
|
+
src/sk_datafort/__init__.py
|
|
4
|
+
src/sk_datafort/detector.py
|
|
5
|
+
src/sk_datafort/policy.py
|
|
6
|
+
src/sk_datafort.egg-info/PKG-INFO
|
|
7
|
+
src/sk_datafort.egg-info/SOURCES.txt
|
|
8
|
+
src/sk_datafort.egg-info/dependency_links.txt
|
|
9
|
+
src/sk_datafort.egg-info/requires.txt
|
|
10
|
+
src/sk_datafort.egg-info/top_level.txt
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
cryptography>=42.0.0
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
sk_datafort
|