Patrón de Aislamiento
El patrón de Aislamiento es una forma de interceptar y modificar mensajes de la API de Tauri enviados por el frontend antes de que lleguen a Tauri Core, todo ello con JavaScript. El código de JavaScript seguro que es inyectado por el patrón de Aislamiento se conoce como la aplicación de Aislamiento.
Por qué
Sección titulada “Por qué”El propósito del patrón de Aislamiento es proporcionar un mecanismo para que los desarrolladores ayuden a proteger su aplicación de llamadas de frontend no deseadas o maliciosas hacia Tauri Core. La necesidad del patrón de Aislamiento surgió de las amenazas provenientes de contenido no confiable ejecutado en el frontend, un caso común para aplicaciones con muchas dependencias. Consulta Seguridad: Modelos de Amenaza para ver una lista de muchas fuentes de amenazas que una aplicación puede enfrentar.
El modelo de amenaza más grande descrito anteriormente para el cual se diseñó el patrón de Aislamiento fue el de las Amenazas de Desarrollo. No solo muchas herramientas de construcción del frontend constan de muchas docenas (o cientos) de dependencias a menudo profundamente anidadas, sino que una aplicación compleja también puede tener una gran cantidad de dependencias (también a menudo profundamente anidadas) que se empaquetan en el resultado final.
Tauri recomienda encarecidamente utilizar el patrón de aislamiento siempre que sea posible. Dado que la aplicación de Aislamiento intercepta todos los mensajes del frontend, siempre se puede utilizar.
Tauri también sugiere encarecidamente blindar tu aplicación cada vez que uses API externas de Tauri. Como desarrollador, puedes utilizar la aplicación segura de Aislamiento para intentar verificar las entradas IPC y asegurarte de que estén dentro de algunos parámetros esperados. Por ejemplo, es posible que desees verificar que una llamada para leer o escribir un archivo no intente acceder a una ruta fuera de las ubicaciones esperadas de tu aplicación. Otro ejemplo es asegurarse de que una llamada HTTP fetch de la API de Tauri solo esté configurando el encabezado Origin a lo que tu aplicación espera que sea.
Dicho esto, intercepta todos los mensajes del frontend, por lo que incluso funcionará con API siempre activas como los Eventos. Dado que algunos eventos pueden hacer que tu propio código de Rust realice acciones, se pueden utilizar las mismas técnicas de validación con ellos.
El patrón de Aislamiento consiste en inyectar una aplicación segura entre tu frontend y Tauri Core para interceptar y modificar los mensajes IPC entrantes. Lo hace mediante el uso de la función de aislamiento (sandboxing) de los <iframe>s para ejecutar JavaScript de forma segura junto a la aplicación frontend principal. Tauri impone el patrón de Aislamiento mientras carga la página, forzando a que todas las llamadas IPC a Tauri Core sean redirigidas primero a través de la aplicación de Aislamiento aislada (sandboxed). Una vez que el mensaje está listo para enviarse a Tauri Core, se encripta utilizando la implementación SubtleCrypto del navegador y se devuelve a la aplicación frontend principal. Una vez allí, se pasa directamente a Tauri Core, donde luego se desencripta y se lee normalmente.
Para garantizar que alguien no pueda leer manualmente las claves de una versión específica de tu aplicación y usarlas para modificar los mensajes después de haber sido encriptados, se generan nuevas claves cada vez que se ejecuta tu aplicación.
Pasos Aproximados de un Mensaje IPC
Sección titulada “Pasos Aproximados de un Mensaje IPC”Para facilitar su seguimiento, aquí hay una lista ordenada con los pasos aproximados por los que pasará un mensaje IPC al ser enviado a Tauri Core con el patrón de Aislamiento:
- El manejador de IPC de Tauri recibe un mensaje
- Manejador de IPC -> Aplicación de Aislamiento
- El gancho (hook) de la aplicación de Aislamiento
[sandbox]se ejecuta y potencialmente modifica el mensaje - El mensaje
[sandbox]se encripta con AES-GCM usando una clave generada en tiempo de ejecución [encriptado]Aplicación de Aislamiento -> manejador de IPC[encriptado]Manejador de IPC -> Tauri Core
Nota: Las flechas (->) indican el paso de mensajes.
Implicaciones de Rendimiento
Sección titulada “Implicaciones de Rendimiento”Dado que el mensaje se encripta, existen costos adicionales de procesamiento en comparación con el patrón Brownfield, incluso si la aplicación segura de Aislamiento no hace nada. A excepción de las aplicaciones sensibles al rendimiento (que probablemente tienen un conjunto pequeño y cuidadosamente mantenido de dependencias para mantener un rendimiento adecuado), la mayoría de las aplicaciones no deberían notar los costos en tiempo de ejecución de encriptar/desencriptar los mensajes IPC, ya que son relativamente pequeños y AES-GCM es relativamente rápido. Si no estás familiarizado con AES-GCM, lo único relevante en este contexto es que es el único algoritmo de modo autenticado incluido en SubtleCrypto y que probablemente ya lo usas todos los días bajo el capó con TLS.
También se genera una clave criptográficamente segura cada vez que se inicia la aplicación Tauri. Por lo general, no es perceptible si el sistema ya tiene suficiente entropía para devolver inmediatamente suficientes números aleatorios, lo cual es extremadamente común para entornos de escritorio. Si se ejecuta en un entorno sin interfaz gráfica (headless) para realizar pruebas de integración con WebDriver, es posible que desees instalar algún tipo de servicio generador de entropía como haveged si tu sistema operativo no incluye uno. Linux 5.6 (marzo de 2020) ahora incluye generación de entropía mediante ejecución especulativa.
Limitaciones
Sección titulada “Limitaciones”Existen algunas limitaciones en el patrón de Aislamiento que surgieron a raíz de inconsistencias entre plataformas. La limitación más significativa se debe a que los archivos externos no se cargan correctamente dentro de <iframe>s aislados en Windows. Debido a esto, hemos implementado un paso simple de inclusión de scripts en línea durante el tiempo de construcción que toma el contenido de los scripts relativos a la aplicación de Aislamiento y los inyecta en línea. Esto significa que la empaquetación típica o la inclusión simple de archivos como <script src="index.js"></script> sigue funcionando correctamente, pero los mecanismos más nuevos como los módulos ES no se cargarán con éxito.
Recomendaciones
Sección titulada “Recomendaciones”Debido a que el objetivo de la aplicación de Aislamiento es proteger contra Amenazas de Desarrollo, recomendamos encarecidamente mantener tu aplicación de Aislamiento lo más simple posible. No solo debes esforzarte por mantener al mínimo las dependencias de tu aplicación de aislamiento, sino que también debes considerar mantener al mínimo sus pasos de construcción requeridos. Esto te permitiría no tener que preocuparte por ataques a la cadena de suministro contra tu aplicación de Aislamiento además de tu aplicación frontend.
Creación de la Aplicación de Aislamiento
Sección titulada “Creación de la Aplicación de Aislamiento”En este ejemplo, crearemos una pequeña aplicación de Aislamiento de estilo "hola mundo" y la conectaremos a una hipotética aplicación Tauri existente. No realizará ninguna verificación de los mensajes que pasan a través de ella, solo imprimirá los contenidos en la consola del WebView.
Para los propósitos de este ejemplo, imaginemos que estamos en el mismo directorio que tauri.conf.json. La aplicación Tauri existente tiene su frontendDist configurado en ../dist.
../dist-isolation/index.html:
<!doctype html><html lang="en"> <head> <meta charset="UTF-8" /> <title>Isolation Secure Script</title> </head> <body> <script src="index.js"></script> </body></html>../dist-isolation/index.js:
window.__TAURI_ISOLATION_HOOK__ = (payload) => { // let's not verify or modify anything, just print the content from the hook console.log('hook', payload); return payload;};Ahora, todo lo que necesitamos hacer es ajustar la configuración de nuestro tauri.conf.json para usar el patrón de Aislamiento, habiendo migrado al patrón de Aislamiento desde el patrón Brownfield.
Configuración
Sección titulada “Configuración”Asumamos que nuestro frontendDist del frontend principal está configurado en ../dist. También enviamos nuestra aplicación de Aislamiento a ../dist-isolation.
{ "build": { "frontendDist": "../dist" }, "app": { "security": { "pattern": { "use": "isolation", "options": { "dir": "../dist-isolation" } } } }}© 2026 Colaboradores de Tauri. CC-BY / MIT