Proteger aplicaciones Electron: guía práctica
Gestionar secretos e IPC de forma segura en aplicaciones de escritorio modernas.
Por qué Electron exige cuidado
Una aplicación Electron combina navegador y entorno Node.js. Si un renderizador que carga contenido remoto o influido por un atacante accede a Node, un XSS se convierte en ejecución remota de código en el equipo. Proteger Electron consiste sobre todo en separar ambos mundos. GitSwitch, cliente Git con Electron y React 19 que guarda tokens de GitHub y una clave Gemini API, debe aplicar bien esa separación.
El contrato de aislamiento
| Ajuste | Valor | Motivo |
|---|---|---|
contextIsolation | activado | Preload y página se ejecutan en contextos JS separados, de modo que la página no altera objetos globales privilegiados |
sandbox | activado | El renderizador no accede directamente a Node.js, require, fs ni child_process |
nodeIntegration | desactivado | La página no ve las funciones incorporadas de Node |
| API expuesta | lista permitida de contextBridge | Preload expone pocas funciones concretas, no ipcRenderer sin restricciones |
IPC como límite de confianza
Toda acción privilegiada atraviesa ipcMain.handle / ipcRenderer.invoke mediante una lista explícita de canales permitidos. El proceso principal trata cada mensaje como entrada no fiable: valida canales, sanea argumentos y establece tiempos máximos para llamadas largas, evitando que una operación Git bloqueada congele la aplicación. No hay un puente para ejecutar comandos arbitrarios; cada canal tiene una tarea limitada.
Gestión de secretos
Los tokens nunca llegan a localStorage ni permanecen en el renderizador:
- En reposo: los tokens personales de GitHub y la clave Gemini residen en el almacén de secretos del sistema: Keychain en macOS, Credential Manager en Windows y libsecret en Linux, no en un archivo de configuración en texto plano.
- En uso: las claves se ocultan en los registros y se borran de memoria después, para no filtrarlas en volcados de fallo o registros compartidos.
- En tránsito: Gemini API es la única salida de red; el diff enviado para generar el mensaje de commit se limita a los cambios que el usuario está registrando.
Conclusión
Los valores que hacen cómodo Electron, como Node en el renderizador, el módulo antiguo remote e IPC amplio, también lo hacen peligroso. GitSwitch los invierte: aislamiento y sandbox activados, un puente mínimo auditable y secretos en el almacén del sistema. El resultado es una aplicación de escritorio con interfaz web que no puede ser persuadida de ejecutar código ajeno a su función.