Compartilhar via


Desenvolver aplicações WebView2 seguras

O WebView2 permite que os programadores alojem conteúdo Web nas aplicações nativas. Quando utilizado corretamente, o alojamento de conteúdos Web oferece várias vantagens, como a utilização de IU baseada na Web, o acesso a funcionalidades da plataforma Web ou a partilha de código entre plataformas.

Num browser, são concedidos aos sites poderes limitados num ambiente em sandbox. No entanto, ao alojar conteúdo Web numa aplicação nativa, o conteúdo Web pode aceder aos recursos e APIs da aplicação nativa. Isto pode originar vulnerabilidades de segurança se o conteúdo Web não estiver corretamente isolado da aplicação anfitriã. Para evitar estas vulnerabilidades, siga as práticas abaixo para melhorar a segurança da sua aplicação WebView2.

Tratar todo o conteúdo Web como inseguro

  • Verifique sempre a origem do documento em execução no WebView2 e avalie a fiabilidade do conteúdo, especialmente antes de utilizar ExecuteScript, PostWebMessageAsJson, PostWebMessageAsStringou qualquer outro método para enviar informações para o controlo WebView2. O controlo WebView2 pode ter navegado para outra página através do utilizador final que interage com a página ou script na página que está a causar a navegação. A origem do documento pode ser obtida a Source partir da propriedade do controlo WebView2.

  • Tenha cuidado com AddScriptToExecuteOnDocumentCreated. Todos os futuros navigations executam o mesmo script e, se esse script fornecer acesso a informações que se destinam apenas a uma determinada origem, qualquer documento HTML poderá ter acesso aos recursos e APIs da aplicação nativa.

  • Valide as mensagens Web e os parâmetros do objeto anfitrião antes de os consumir, uma vez que as mensagens Web e os parâmetros podem ser mal formados (involuntariamente ou maliciosamente) e podem fazer com que a aplicação se comporte inesperadamente.

  • Ao examinar o resultado de uma ExecuteScript chamada de método, que é um WebMessageReceived evento, verifique sempre a Source propriedade do controlo WebView2 para verificar a origem do remetente ou verifique qualquer outro mecanismo de receção de informações de um documento HTML num controlo WebView2, para validar se o URI do documento HTML é o que espera.

Evitar proxies genéricos

Crie mensagens Web específicas e interações de objeto anfitrião, em vez de utilizar proxies genéricos.

Utilizar PostWebMessageAsJson para enviar mensagens

Utilize o PostWebMessageAsJson método para enviar mensagens para o controlo WebView2. Ao construir uma mensagem para enviar para um controlo WebView2, prefira utilizar PostWebMessageAsJson e construir o parâmetro de cadeia JSON com uma biblioteca JSON. Isto evita potenciais acidentes de codificação de informações numa cadeia ou script JSON e garante que nenhuma entrada controlada por atacantes pode modificar o resto da mensagem JSON ou executar código JavaScript arbitrário.

Restringir a funcionalidade de conteúdo Web

Restringir a funcionalidade de conteúdo Web, se não for necessário. Atualize as propriedades do WebView2 no CoreWebView2Settings para restringir a funcionalidade do conteúdo Web, da seguinte forma:

  • Defina AreHostObjectsAllowed como false, se não esperar que o conteúdo Web aceda a objetos de anfitrião.

  • Defina IsWebMessageEnabled como false, se não esperar que o conteúdo Web publique mensagens Web na sua aplicação nativa.

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

  • Defina AreDefaultScriptDialogsEnabled como false, se não esperar que o conteúdo Web seja apresentado alert ou prompt caixas de diálogo.

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

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

  • Para impedir que a sua aplicação navegue para determinadas páginas, utilize os NavigationStarting eventos e FrameNavigationStarting para verificar a navegação entre páginas ou molduras e, em seguida, bloqueie condicionalmente a navegação.

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

Remover objetos de anfitrião expostos

Ao navegar para um novo documento, utilize o ContentLoading evento e RemoveHostObjectFromScript remova objetos de anfitrião expostos.

O WebView2 não pode ser executado como um utilizador do sistema

O WebView2 não pode ser executado como um utilizador do sistema. Esta restrição bloqueia cenários como a criação de um Fornecedor de Credenciais.