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
,PostWebMessageAsString
o 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 laSource
propiedad del control WebView2.Tenga cuidado con
AddScriptToExecuteOnDocumentCreated
. En el futuronavigations
, 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 unWebMessageReceived
evento, compruebe siempre laSource
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:
false
Establezca enAreHostObjectsAllowed
, si no espera que el contenido web tenga acceso a objetos host.false
Establezca enIsWebMessageEnabled
, si no espera que el contenido web publique mensajes web en la aplicación nativa.false
Establezca enIsScriptEnabled
, 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 muestrealert
el contenido web oprompt
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 laNavigationStarting
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.