Saltar al contenido

Endurecer la webview

Las cuatro medidas que cierran lo que queda: congelar los prototipos, quitar las herramientas de desarrollo, controlar el menú contextual y desactivar la navegación. Qué cuesta cada una y cuál merece la pena.

Las cuatro

La navegación, que es la más rentable

Es la menos conocida y la que cierra una vía real. Por defecto, un enlace en tu interfaz puede sacar la webview de tu aplicación: el usuario pulsa, la ventana carga otra página, y esa página tiene los permisos de esa ventana.

Rust
// interceptar y decidir: lo interno navega, lo externo va al navegador del sistemaWebviewWindowBuilder::new(app, "main", WebviewUrl::App("index.html".into()))    .on_navigation(|url| {        // solo se permite navegar dentro de la propia app        url.scheme() == "tauri" || url.host_str() == Some("tauri.localhost")    })    .build()?;

Y los enlaces externos se abren con el plugin correspondiente, que los entrega al navegador del sistema en vez de cargarlos dentro. Eso es lo correcto por dos razones: el usuario los ve en su navegador con su sesión y sus extensiones, y tu ventana no acaba mostrando algo que no controlas.

Sin esto, un enlace externo mal puesto —o inyectado— convierte tu ventana en un navegador con las capabilities de tu aplicación. Es la misma familia del nivel 32, por una puerta que casi nadie mira.

Congelar los prototipos

Una clave en la sección de seguridad, y protege contra una clase de ataque concreta: modificar los objetos base del lenguaje para que una llamada que tu código hace acabe pasando por código ajeno.

JSON
{ "app": { "security": { "freezePrototype": true } } }

Cuesta muy poco y a veces rompe algo. Cuando rompe, casi siempre es una librería que modifica prototipos —lo que se llamaba «parchear el mono»— y eso es una señal por sí misma: una dependencia que hace eso tiene más acceso a tu ejecución del que necesita.

El menú contextual

La medida que más quejas produce si se hace a medias. El menú del navegador trae entradas que en una aplicación no tienen sentido —recargar, atrás, ver código fuente— y también las que sí: copiar, pegar, seleccionar, buscar.

Tres posturas:

  • Dejarlo. Es lo que hace la mayoría, y el precio es que el usuario ve entradas raras si abre el menú contextual sobre tu interfaz.
  • Quitarlo entero. Y el usuario se queda sin copiar y pegar con el ratón, que es una regresión seria. No hacer esto sin la tercera.
  • Sustituirlo por uno propio. Un menú nativo del nivel 49 con las entradas que tengan sentido, incluidas copiar y pegar. Es lo correcto y es trabajo.

Qué activar según el tipo de aplicación