Compartir a través de


Desarrollo de aplicaciones WebView2 seguras

WebView2 permite a los desarrolladores hospedar contenido web en las aplicaciones nativas. Cuando se usa correctamente, hospedar contenido web ofrece varias ventajas, como el uso de la interfaz de usuario basada en web, el acceso a características de la plataforma web o el uso compartido de código entre plataformas.

En un explorador web, a los sitios web se les conceden poderes limitados en un entorno de espacio aislado. Sin embargo, al hospedar contenido web en una aplicación nativa, el contenido web puede acceder a los recursos y las API de la aplicación nativa. Esto puede provocar vulnerabilidades de seguridad si el contenido web no está aislado correctamente de la aplicación host. Para evitar estas vulnerabilidades, siga los procedimientos siguientes para mejorar la seguridad de la aplicación WebView2.

Tratar todo el contenido web como inseguro

  • Compruebe siempre el origen del documento que se ejecuta dentro de WebView2 y evalúe la confiabilidad del contenido, especialmente antes de usar ExecuteScript, PostWebMessageAsJson, PostWebMessageAsStringo cualquier otro método para enviar información al control WebView2. Es posible que el control WebView2 haya navegado a otra página a través del usuario final que interactúa con la página o el script de la página que provoca la navegación. El origen del documento se puede obtener de la Source propiedad del control WebView2.

  • Tenga cuidado con AddScriptToExecuteOnDocumentCreated. En el futuro navigations , ejecute el mismo script y, si ese script proporciona acceso a información que solo está pensada para un origen determinado, cualquier documento HTML puede tener acceso a los recursos y las API de la aplicación nativa.

  • Valide los mensajes web y los parámetros de objetos de host antes de consumirlos, ya que los mensajes web y los parámetros pueden tener un formato incorrecto (de forma involuntaria o malintencionada) y pueden hacer que la aplicación se comporte de forma inesperada.

  • Al examinar el resultado de una ExecuteScript llamada al método, que es un WebMessageReceived evento, compruebe siempre la Source propiedad del control WebView2 para comprobar el origen del remitente o compruebe cualquier otro mecanismo de recepción de información de un documento HTML en un control WebView2 para validar que el URI del documento HTML es lo que espera.

Evitar servidores proxy genéricos

Diseñe mensajes web específicos e interacciones de objetos de host, en lugar de usar servidores proxy genéricos.

Usar PostWebMessageAsJson para enviar mensajes

Use el PostWebMessageAsJson método para enviar mensajes al control WebView2. Al construir un mensaje para enviarlo a un control WebView2, prefiere usar PostWebMessageAsJson y construir el parámetro de cadena JSON mediante una biblioteca JSON. Esto evita posibles accidentes de codificación de información en una cadena o script JSON y garantiza que ninguna entrada controlada por el atacante pueda modificar el resto del mensaje JSON o ejecutar código JavaScript arbitrario.

Restricción de la funcionalidad de contenido web

Restrinja la funcionalidad de contenido web, si no es necesario. Actualice las propiedades de WebView2 en CoreWebView2Settings para restringir la funcionalidad del contenido web, como se indica a continuación:

  • falseEstablezca en AreHostObjectsAllowed , si no espera que el contenido web tenga acceso a objetos host.

  • falseEstablezca en IsWebMessageEnabled , si no espera que el contenido web publique mensajes web en la aplicación nativa.

  • falseEstablezca en IsScriptEnabled , si no espera que el contenido web ejecute scripts (por ejemplo, al mostrar contenido HTML estático).

  • Establezca en AreDefaultScriptDialogsEnabled , si no espera que se muestre alert el contenido web o prompt los diálogos.false

Actualizar la configuración en función del origen de la nueva página

Actualice la configuración en función del origen de la nueva página, como se indica a continuación:

  • Para evitar que la aplicación navegue a determinadas páginas, use los eventos y FrameNavigationStarting para comprobar la NavigationStarting navegación de páginas o marcos y, a continuación, bloquee condicionalmente la navegación.

  • Al navegar a una página nueva, es posible que tenga que ajustar los valores de propiedad en el CoreWebView2Settings objeto para que coincidan con los requisitos de seguridad de la nueva página, como se describe en Restricción de la funcionalidad de contenido web, anteriormente.

Eliminación de objetos host expuestos

Al navegar a un documento nuevo, use el evento y RemoveHostObjectFromScript quite los ContentLoading objetos host expuestos.

WebView2 no se puede ejecutar como usuario del sistema

WebView2 no se puede ejecutar como usuario del sistema. Esta restricción bloquea escenarios como la creación de un proveedor de credenciales.