Desenvolver aplicativos WebView2 seguros

O WebView2 permite que os desenvolvedores hospedem conteúdo da Web nos aplicativos nativos. Quando usado corretamente, hospedar conteúdo da web oferece várias vantagens, como usar a interface do usuário baseada na web, acessar recursos da plataforma da web ou compartilhar código entre plataformas.

Em um navegador da Web, os sites recebem poderes limitados em um ambiente de área restrita. No entanto, ao hospedar conteúdo da Web em um aplicativo nativo, o conteúdo da Web pode acessar os recursos e APIs do aplicativo nativo. Isso pode levar a vulnerabilidades de segurança se o conteúdo da Web não for isolado corretamente do aplicativo host. Para evitar essas vulnerabilidades, siga as práticas abaixo para melhorar a segurança do seu aplicativo WebView2.

Trate todo o conteúdo da Web como inseguro

  • Sempre marque a origem do documento que está sendo executado dentro do WebView2 e avalie a confiabilidade do conteúdo, especialmente antes de usar ExecuteScript, PostWebMessageAsJson, PostWebMessageAsString, ou qualquer outro método para enviar informações para o controle WebView2. O controle WebView2 pode ter navegado para outra página por meio do usuário final interagindo com a página ou script na página que causa a navegação. A origem do documento pode ser obtida da Source propriedade do controle WebView2.

  • Tenha cuidado com AddScriptToExecuteOnDocumentCreated. Todos os futuros navigations executarão o mesmo script e, se esse script fornecer acesso a informações destinadas apenas a uma determinada origem, qualquer documento HTML poderá ter acesso aos recursos e APIs do aplicativo nativo.

  • Valide mensagens da Web e parâmetros do objeto host antes de consumi-los, pois mensagens e parâmetros da Web podem ser malformados (involuntariamente ou maliciosamente) e podem fazer com que o aplicativo se comporte de maneira inesperada.

  • Ao examinar o resultado de uma ExecuteScript chamada de método, que é um WebMessageReceived evento, sempre marque a Source propriedade do controle WebView2 para marcar a origem do remetente ou marque qualquer outro mecanismo de recebimento de informações de um documento HTML em um controle WebView2, para validar que o URI do documento HTML é o que você espera.

Evite proxies genéricos

Crie mensagens da Web específicas e interações com objetos host, em vez de usar proxies genéricos.

Use PostWebMessageAsJson para enviar mensagens

Use o PostWebMessageAsJson método para enviar mensagens para o controle WebView2. Ao construir uma mensagem para enviar para um controle WebView2, prefira usar PostWebMessageAsJson e construir o parâmetro de cadeia de caracteres JSON usando uma biblioteca JSON. Isso evita possíveis acidentes de codificação de informações em uma cadeia de caracteres ou script JSON e garante que nenhuma entrada controlada pelo invasor possa modificar o restante da mensagem JSON ou executar código JavaScript arbitrário.

Restringir a funcionalidade do conteúdo da Web

Restrinja a funcionalidade do conteúdo da Web, se ela não for necessária. Atualize as propriedades do WebView2 para CoreWebView2Settings restringir a funcionalidade do conteúdo da Web, da seguinte maneira:

  • Defina AreHostObjectsAllowed como false, se você não espera que o conteúdo da Web acesse objetos host.

  • Defina IsWebMessageEnabled como false, se você não espera que o conteúdo da Web poste mensagens da Web em seu aplicativo nativo.

  • Defina IsScriptEnabled como false, se você não espera que o conteúdo da Web execute scripts (por exemplo, ao mostrar conteúdo HTML estático).

  • Defina AreDefaultScriptDialogsEnabled como false, se você não espera que o conteúdo da Web seja exibido alert ou prompt as caixas de diálogo.

Atualizar configurações com base na origem da nova página

Atualize as configurações com base na origem da nova página, da seguinte maneira:

  • Para impedir que seu aplicativo navegue para determinadas páginas, use os eventos and FrameNavigationStarting para marcar a NavigationStarting navegação de página ou quadro e, em seguida, bloqueie a navegação condicionalmente.

  • Ao navegar para uma nova página, talvez seja necessário ajustar os valores de propriedade no CoreWebView2Settings objeto para corresponder aos requisitos de segurança da nova página, conforme descrito em Restringir a funcionalidade de conteúdo da Web acima.

Remover objetos hospedeiros expostos

Ao navegar para um novo documento, use o ContentLoading evento e RemoveHostObjectFromScript remova objetos host expostos.

O WebView2 não pode ser executado como um usuário do sistema

O WebView2 não pode ser executado como um usuário do sistema. Essa restrição bloqueia cenários como a criação de um provedor de credenciais.