Monitor de Canales — Seguridad
Qué guarda OmniGest, cómo está cifrado y cómo revocar acceso.
Qué se guarda en la base de datos
Cuando completas /monitor_setup, OmniGest guarda estos campos en la tabla monitor_sessions:
| Campo | Contenido | Cifrado |
|---|---|---|
api_id |
Tu Telegram API id (numérico) | Texto plano |
api_hash_encrypted |
Tu Telegram API hash (32 hex) | Fernet (AES-128-CBC + HMAC-SHA256) |
session_string_encrypted |
Session string completa de Telethon | Fernet |
phone_last4 |
Últimos 4 dígitos del número secundario | Texto plano (solo UX) |
status |
active / revoked / banned / flood_wait | Texto plano |
El cifrado Fernet usa la misma ENCRYPTION_KEY que protege otros secretos en OmniGest (p. ej. tokens de clones, api_secret de afiliado). La rota solo el operador, nunca desde UI.
Qué NO guarda OmniGest
- Tu código SMS — nunca toca el bot. Lo tecleas localmente en
generate_monitor_session.py. - Tu contraseña 2FA — igual.
- Bytes de imágenes de producto — solo URLs en caché (TTL 24h).
- Contactos, historial de mensajes o datos del perfil de tu cuenta secundaria más allá de lo necesario para scraping.
Modelo de amenazas: qué pasa si se filtra mi session string
Una session_string de Telethon equivale a una contraseña de tu cuenta de Telegram. Alguien con ella puede:
- Leer tu bandeja como tú.
- Enviar mensajes como tú.
- Acceder a grupos y canales donde estés.
Por eso recomendamos fuertemente una cuenta secundaria — no la personal. Si hay una brecha, pierdes la secundaria, no tu identidad.
Mitigaciones ya en sitio:
- Cifrado en reposo (Fernet).
- No se transmite en texto plano en el cable (el wizard DM usa el cifrado MTProto de Telegram).
- El código que maneja la session string no tiene logging — nunca se escribe a disco fuera de la BD.
Cómo revocar acceso
Tú controlas la session string. Para matarla inmediatamente:
- Abre Telegram en tu móvil con la cuenta secundaria.
- Ajustes → Dispositivos → Sesiones activas.
- Busca la sesión creada por el generador (normalmente "Telethon" o similar).
- Pulsa → Terminar sesión.
OmniGest detecta la revocación en el siguiente scrape (en 1 hora):
- Marca
monitor_sessions.status = 'revoked'. - Deja de escanear para ese owner.
- Te envía un DM de alerta: "🚨 Tu sesión de monitor ha sido revocada. Regenera con
scripts/generate_monitor_session.pyy/monitor_setup."
También puedes eliminar datos del monitor voluntariamente:
/monitor_sources del @canal1
/monitor_sources del @canal2
…y el admin puede poner MONITOR_ENABLED=false en .env para parar todo sin borrar filas de BD.
Aislamiento multi-tenant
Cada consulta de BD en Monitor de Canales recibe owner_id como parámetro explícito. Los handlers de callback verifican callback.from_user.id == candidate.owner_id antes de hacer nada. Cualquier intento de acceso cruzado se loguea como warning de seguridad y se rechaza. Nunca verás candidatos o destinos de otra persona.
GDPR y retención
- Candidatos en estado final (
sent,ignored,expired) se borran automáticamente a los 30 días. - La caché de imágenes de producto se borra a los 7 días.
- No se persisten bytes de imagen — solo URLs.
- Al eliminar una cuenta, todas las filas
monitor_*del owner se borran (cascade).
Nota legal sobre scraping
Al proporcionar tu cuenta de Telegram para scraping, aceptas responsabilidad por cumplir los Términos de Servicio de Telegram. La cuenta secundaria lee posts de canales públicos a ritmo muy bajo (una vez por hora por fuente). Normalmente está dentro de límites aceptables, pero Telegram puede cambiar su política en cualquier momento. Recomendamos:
- Usar una cuenta secundaria.
- No escanear más de ~10 canales en total.
- No combinar con otro uso intensivo de Telethon en la misma cuenta.