Docs / Monitor / Seguridad

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:

  1. Abre Telegram en tu móvil con la cuenta secundaria.
  2. Ajustes → Dispositivos → Sesiones activas.
  3. Busca la sesión creada por el generador (normalmente "Telethon" o similar).
  4. 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.py y /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).

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.