La puerta que deja abierta el WebView

Un WebView no es un sandbox: es un motor de navegador completo soltado dentro de tu app con los privilegios de tu app. Android documenta el WebView abiertamente como esencialmente un motor de navegador de todas las funciones (Chromium) con una huella de memoria significativa y una arquitectura multiproceso compleja. Como la página se ejecuta con la identidad de la app que la incrusta, cualquier capacidad que el host conceda — acceso a archivos, credenciales guardadas, el puente nativo — es alcanzable por cualquier JavaScript que la página cargue. El puente que permite que la web llame a lo nativo es, por construcción, una puerta abierta: la página es a la vez el contenido no confiable y la superficie privilegiada.

Ese es el quid del problema del sandbox en el WebView: no hay un muro sólido entre el documento web y la app nativa. Una página maliciosa o simplemente con bugs puede cruzar el puente, leer el almacenamiento compartido y abusar de los permisos del host. Es exactamente por eso que los navegadores aíslan cada sitio en su propio proceso de render, y que iOS asigna a cada app su propio contenedor reforzado por un sandbox MAC a nivel de kernel: la plataforma sabe que el código no confiable debe ser cercado.

El aislamiento como propiedad de primer orden

Un runtime de mini-programas invierte el valor predeterminado. En lugar de conceder al documento incrustado poder nativo, coloca a cada mini-programa dentro de su propio sandbox de ejecución y medía cada llamada privilegiada a través de la plataforma. El modelo de WeChat — el que copió todo el ecosistema — divide un programa en una capa lógica y una capa de vista, ambas bajo el control del cliente, sin DOM directo y sin mango nativo directo. Como describen los análisis de ingeniería de plataforma, la capa lógica no tiene acceso al DOM y no puede leer ni modificar el árbol de página, mientras la capa de vista no ejecuta la lógica de negocio escrita por el desarrollador. Solo se encuentran a través de un puente de mensajes serializado.

Desde el punto de vista de la seguridad, ese límite es el punto entero: el JavaScript de un programa no puede tocar los datos de otro programa, no puede llegar al host y no puede llamar a una API sensible sin la mediación explícita y declarada de la plataforma. El aislamiento no es un ajuste que el desarrollador recuerda activar: es la forma del runtime mismo.

Lo que los muros realmente bloquean

Concretamente, un sandbox reforzado por el runtime detiene tres cosas que un WebView no puede:

RiesgoWebViewRuntime de mini-programas
Datos entre programasUn contexto web compartidoAlmacenamiento aislado por programa
Poder nativoPuente JS abiertoCapacidad mediada por la plataforma
Ejecución dinámicaeval / código remotoEliminado a nivel de runtime

La capa lógica suele eliminar por completo document, window y la ejecución tipo eval dinámico, de modo que la ruta clásica de escalada de XSS a nativo no existe. Las solicitudes de red se fuerzan a través de la lista de dominios permitidos de la plataforma sobre HTTPS, lo que elimina la ruta silenciosa de filtración. Las API sensibles — ubicación, cámara, pago, archivos — se declaran en un manifiesto, se revisan al enviar y se medían, para que un programa de terceros no pueda tomar en silencio lo que el host nunca pensó compartir.

El dividendo de cumplimiento

Esta es la propiedad que hace financiable abrir la app a socios. Sin aislamiento, invitar código de terceros a tu superficie más confiable significa heredar el riesgo y la responsabilidad de cada tercero. Con aislamiento, el host conserva la cuenta, la billetera y el canal de notificación, mientras cada mini-programa vive en una caja cercada de la que no puede escapar. La seguridad de contenido, la residencia de datos y los controles anti-abuso pasan de ser esperanza a ser responsabilidad de la plataforma.

Refleja el mismo principio que ya aplican los fabricantes de sistemas operativos: el App Sandbox de Apple y las políticas MAC del kernel de iOS dan a cada app un área privada del sistema de archivos y bloquean el acceso entre apps a nivel de kernel, precisamente para que una app vulnerable o maliciosa no se mueva lateralmente. Un runtime de mini-programas aplica esa misma disciplina un nivel más abajo: no solo app contra app, sino programa contra programa dentro de una sola app.

Cómo lo refuerza Cross Mini App

Cross Mini App se construye como un runtime genérico con el aislamiento como primitiva. Cada mini-programa obtiene su propio límite de ejecución sandbox, una superficie de API wx.* uniforme y mediada por capacidades, y una ruta de distribución gobernada — revisión de envío, seguridad de contenido y controles anti-abuso — antes de que cualquier código llegue a un usuario. Un programa escrito una vez corre en cada host que adopte el runtime, pero corre dentro del muro, nunca fuera de él.

Esa es la diferencia entre incrustar web e incrustar un runtime: la web trae la puerta abierta; un runtime trae la cerca — y la cerca es lo que hace que un catálogo abierto sea seguro de operar.

Fuentes