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
,PostWebMessageAsString
ou 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 aSource
partir da propriedade do controlo WebView2.Tenha cuidado com
AddScriptToExecuteOnDocumentCreated
. Todos os futurosnavigations
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 é umWebMessageReceived
evento, verifique sempre aSource
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
comofalse
, se não esperar que o conteúdo Web aceda a objetos de anfitrião.Defina
IsWebMessageEnabled
comofalse
, se não esperar que o conteúdo Web publique mensagens Web na sua aplicação nativa.Defina
IsScriptEnabled
comofalse
, se não esperar que o conteúdo Web execute scripts (por exemplo, ao mostrar conteúdo HTML estático).Defina
AreDefaultScriptDialogsEnabled
comofalse
, se não esperar que o conteúdo Web seja apresentadoalert
ouprompt
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 eFrameNavigationStarting
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.