Considerações de segurança do Blazor Hybrid ASP.NET Core

Observação

Esta não é a versão mais recente deste artigo. Para informações sobre a versão vigente, confira a Versão do .NET 8 deste artigo.

Importante

Essas informações relacionam-se ao produto de pré-lançamento, que poderá ser substancialmente modificado antes do lançamento comercial. A Microsoft não oferece nenhuma garantia, explícita ou implícita, quanto às informações fornecidas aqui.

Para informações sobre a versão vigente, confira a Versão do .NET 8 deste artigo.

Este artigo descreve as considerações de segurança para aplicativos Blazor Hybrid.

Os aplicativos Blazor Hybrid que renderizam o conteúdo da Web executam código .NET dentro de uma plataforma Web View. O código .NET interage com o conteúdo da Web por meio de um canal de interoperabilidade entre o código .NET e o Web View.

O código WebView e .NET interoperam dentro do aplicativo para renderizar o conteúdo da web.

O conteúdo da Web renderizado no Web View pode vir de ativos fornecidos pelo aplicativo de qualquer um dos seguintes locais:

  • A pasta wwwroot no aplicativo.
  • Uma origem externa ao aplicativo. Por exemplo, uma fonte de rede, como a Internet.

Existe um limite de confiança entre o código .NET e o código que é executado dentro do Web View. O código .NET é fornecido pelo aplicativo e por todos os pacotes de terceiros confiáveis que você instalou. Depois que o aplicativo for criado, as fontes de conteúdo do código Web View .NET não poderão ser alteradas.

Ao contrário das fontes de conteúdo do código .NET, as fontes de conteúdo do código executado dentro do Web View podem vir não apenas do aplicativo, mas também de fontes externas. Por exemplo, ativos estáticos de uma CDN (Rede de Distribuição de Conteúdo) externa podem ser usados ou renderizados pelo Web View de um aplicativo.

Considere o código dentro do Web View como não confiável da mesma forma que o código em execução dentro do navegador para um aplicativo Web não é confiável. As mesmas ameaças e recomendações gerais de segurança se aplicam a recursos não confiáveis nos aplicativos Blazor Hybrid como para outros tipos de aplicativos.

Se possível, evite carregar conteúdo de uma origem de terceiros. Para atenuar o risco, você poderá fornecer conteúdo diretamente do aplicativo baixando os ativos externos, verificando se eles são seguros para atender aos usuários e colocando-os na pasta wwwroot do aplicativo para empacotamento com o restante do aplicativo. Quando o conteúdo externo é baixado para inclusão no aplicativo, é recomendável verificar se há vírus e malware antes de colocá-lo na pasta wwwroot do aplicativo.

Se seu aplicativo precisar fazer referência ao conteúdo de uma origem externa, recomendamos que você use abordagens comuns de segurança da Web para fornecer ao aplicativo a oportunidade de bloquear o carregamento do conteúdo se ele for comprometido:

Mesmo que todos os recursos sejam empacotados no aplicativo e não sejam carregados de nenhuma origem externa, mantenha-se cauteloso quanto aos problemas no código dos recursos executados dentro do Web View, pois os recursos podem ter vulnerabilidades que podem permitir ataques XSS (scripts entre sites).

Em geral, a estrutura do Blazor protege contra XSS lidando com HTML de maneiras seguras. No entanto, alguns padrões de programação permitem que os componentes do Razor injetem HTML bruto na saída renderizada, como a renderização de conteúdo de uma fonte não confiável. Por exemplo, a renderização de conteúdo HTML diretamente de um banco de dados deve ser evitada. Além disso, as bibliotecas JavaScript usadas pelo aplicativo podem manipular HTML de maneiras inseguras para renderizar inadvertida ou deliberadamente uma saída não segura.

Por esses motivos, é melhor aplicar as mesmas proteções contra XSS que normalmente são aplicadas a aplicativos Web. Impeça o carregamento de scripts de fontes desconhecidas e não implemente recursos JavaScript potencialmente inseguros, como eval e outros primitivos JavaScript não seguros. É recomendável estabelecer um CSP para reduzir esses riscos de segurança.

Se o código dentro do Web View for comprometido, o código obterá acesso a todo o conteúdo dentro do Web View e poderá interagir com o host por meio do canal de interoperabilidade. Por esse motivo, todos os conteúdos provenientes do Web View (eventos, interoperabilidade de JS) devem ser tratados como não confiáveis e validados da mesma forma que para outros contextos confidenciais, como em um aplicativo Blazor Server comprometido que pode levar a ataques mal-intencionados no sistema do host.

Não armazene informações confidenciais, como credenciais, tokens de segurança ou dados confidenciais do usuário no contexto do Web View, pois isso disponibiliza as informações para um invasor se o Web View estiver comprometido. Há alternativas mais seguras, como lidar com as informações confidenciais diretamente na parte nativa do aplicativo.

Conteúdo externo renderizado em um iframe

Ao usar um iframe para exibir conteúdo externo em uma página do Blazor Hybrid, recomendamos que os usuários aproveitem os recursos de área restrita para garantir que o conteúdo seja isolado da página pai que contém o aplicativo. No exemplo de componente Razor a seguir, o sandboxatributo está presente na marca <iframe> para aplicar os recursos de área restrita à página admin.html:

<iframe sandbox src="https://contoso.com/admin.html" />

Aviso

O sandboxatributo não tem suporte em versões iniciais do navegador. Para obter mais informações, confira Posso usar: sandbox.

Por padrão, os links para URLs fora do aplicativo são abertos em um aplicativo externo apropriado, não carregados no Web View. Não recomendamos substituir o comportamento padrão.

Manter o Web View atual em aplicativos implantados

Por padrão, o controle do BlazorWebView usa a plataforma nativa específica do Web View atualmente instalada. Como o Web View nativo é atualizado periodicamente com suporte para novas APIs e correções para problemas de segurança, pode ser necessário garantir que um aplicativo esteja usando uma versão do Web View que atenda aos requisitos do aplicativo.

Use uma das seguintes abordagens para manter o Web View atual em aplicativos implantados:

  • Em todas as plataformas: verifique a versão do Web View e solicite que o usuário execute as etapas necessárias para atualizá-la.
  • Somente no Windows: empacote uma versão fixa do Web View no aplicativo, usando-a no lugar do Web View compartilhado do sistema.

Android

O Web View para Android é distribuído e atualizado por meio da Google Play Store. Verifique a versão do Web View lendo a cadeia de caracteres User-Agent. Leia a propriedade navigator.userAgent do Web View usando a interoperabilidade do JavaScript e, opcionalmente, armazene o valor em cache usando um serviço singleton se a cadeia de caracteres do agente de usuário for necessária fora de um contexto do componente do Razor.

Ao usar o Android Emulator:

  • Use um dispositivo emulado com o Google Play Services pré-instalado. Os dispositivos emulados sem o Google Play Services pré-instalados não têm suporte.
  • Instale o Google Chrome com o Google Play Store. Se o Google Chrome já estiver instalado, atualize o Chrome com o Google Play Store. Se um dispositivo emulado não tiver a versão mais recente do Chrome instalada, talvez ele não tenha a versão mais recente do Android Web View instalada.

iOS/Mac Catalyst

O iOS e o Mac Catalyst usam WKWebView, que é um controle baseado no Safari atualizado pelo sistema operacional. Semelhante ao caso do Android, determine a versão do Web View lendo a cadeia de caracteres do Web ViewUser-Agent.

Windows (.NET MAUI, WPF, Windows Forms)

No Windows, o Microsoft Edge WebView2 baseado em Chromium é necessário para executar aplicativos Web do Blazor.

Por padrão, é usada a versão instalada mais recente do WebView2, conhecida como Evergreen distribution. Se você quiser enviar uma versão específica do WebView2 com o aplicativo, use a Fixed Version distribution.

Para obter mais informações sobre como verificar a versão atualmente instalada e os modos de distribuição do WebView2, confira a WebView2 documentação de distribuição.

Recursos adicionais