Compartir a través de


Consideraciones de seguridad de ASP.NET Core Blazor Hybrid

Nota

Esta no es la versión más reciente de este artículo. Para la versión actual, consulte la versión .NET 8 de este artículo.

Advertencia

Esta versión de ASP.NET Core ya no se admite. Para obtener más información, consulte la Directiva de soporte técnico de .NET y .NET Core. Para la versión actual, consulte la versión .NET 8 de este artículo.

Importante

Esta información hace referencia a un producto en versión preliminar, el cual puede sufrir importantes modificaciones antes de que se publique la versión comercial. Microsoft no proporciona ninguna garantía, expresa o implícita, con respecto a la información proporcionada aquí.

Para la versión actual, consulte la versión .NET 8 de este artículo.

En este artículo se describen las consideraciones de seguridad de las aplicaciones Blazor Hybrid.

Las aplicaciones Blazor Hybrid que representan contenido web ejecutan código .NET dentro de una plataforma Web View. El código .NET interactúa con el contenido web a través de un canal de interoperabilidad entre el código .NET y Web View.

El código de .NET y WebView interoperan dentro de la aplicación para representar el contenido web.

El contenido web representado en Web View puede proceder de los recursos proporcionados por la aplicación de cualquiera de las siguientes ubicaciones:

  • La carpeta wwwroot de la aplicación.
  • Origen externo a la aplicación. Por ejemplo, un origen de red, como Internet.

Existe un límite de confianza entre el código .NET y el código que se ejecuta dentro de Web View. El código .NET lo proporciona la aplicación y cualquier paquete de terceros de confianza que haya instalado. Una vez compilada la aplicación, los orígenes de contenido de Web View del código .NET no pueden cambiar.

A diferencia de los orígenes de contenido del código .NET, los orígenes de contenido del código que se ejecuta dentro de Web View pueden provenir no solo de la aplicación, sino también de orígenes externos. Por ejemplo, los recursos estáticos de una instancia externa de Content Delivery Network externo (CDN) pueden usarse o representarse mediante el objeto Web View de la aplicación.

Considere el código que está dentro de Web View como poco confiable del mismo modo que el código que se ejecuta dentro del explorador de una aplicación web no es de confianza. Las mismas amenazas y recomendaciones generales de seguridad se aplican a los recursos no confiables de las aplicaciones Blazor Hybrid que a otros tipos de aplicaciones.

Si es posible, evite cargar contenido de un origen de terceros. Para mitigar el riesgo, podría servir contenido directamente desde la aplicación descargando los recursos externos, comprobando que se pueden servir de forma segura a los usuarios y colocándolos en la carpeta wwwroot de la aplicación para empaquetarlos con el resto de la aplicación. Cuando se descarga el contenido externo para su inclusión en la aplicación, se recomienda examinarlo por si tuviera virus y malware antes de colocarlo en la carpeta wwwroot de la aplicación.

Si la aplicación debe hacer referencia a contenido de un origen externo, se recomienda usar enfoques de seguridad web comunes para proporcionar a la aplicación la oportunidad de impedir que el contenido se cargue si se ha visto comprometido:

Incluso si todos los recursos se empaquetan en la aplicación y no se cargan desde ningún origen externo, siga teniendo cuidado con los problemas del código de los recursos que se ejecutan dentro de Web View, ya que los recursos podrían presentar vulnerabilidades que podrían permitir ataques de scripting entre sitios (XSS).

En general, el marco Blazor protege contra XSS al tratar con HTML de maneras seguras. Sin embargo, algunos patrones de programación permiten que los componentes de Razor inserten HTML sin formato en la salida representada, como la representación de contenido de un origen que no es de confianza. Por ejemplo, se debe evitar la representación de contenido HTML directamente desde una base de datos. Además, las bibliotecas de JavaScript usadas por la aplicación pueden manipular HTML de maneras poco seguras para representar de forma involuntaria o deliberada una salida no segura.

Por estos motivos, es mejor aplicar las mismas protecciones contra XSS que se aplican normalmente a las aplicaciones web. Evite cargar scripts de orígenes desconocidos y no implemente características de JavaScript potencialmente no seguras, como eval y otros primitivos de JavaScript no seguros. Se recomienda establecer un CSP para reducir estos riesgos de seguridad.

Si el código dentro de Web View se compromete, el código obtiene acceso a todo el contenido dentro de Web View y podría interactuar con el host a través del canal de interoperabilidad. Por ese motivo, cualquier contenido procedente de Web View (eventos, interoperabilidad de JS) debe tratarse como no de confianza y validarse de la misma manera que en otros contextos confidenciales, como en una aplicación Blazor Server comprometida que pueda provocar ataques malintencionados en el sistema host.

No almacene información confidencial, como credenciales, tokens de seguridad o datos de usuario confidenciales, en el contexto de Web View, ya que hace que la información esté disponible para un atacante si el objeto Web View se viera comprometido. Hay alternativas más seguras, como controlar la información confidencial directamente dentro de la parte nativa de la aplicación.

Contenido externo representado en un iframe

Al usar iframe para mostrar contenido externo dentro de una página Blazor Hybrid, se recomienda que los usuarios aprovechen las características de espacio aislado para asegurarse de que el contenido está aislado de la página principal que contiene la aplicación. En el siguiente ejemplo de componente Razor, el atributosandbox está presente para que la etiqueta <iframe> aplique características de espacio aislado a la página admin.html:

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

Advertencia

El atributo sandboxno se admite en versiones anteriores del explorador. Para más información, consulte Puedo usar: sandbox.

De forma predeterminada, los vínculos a direcciones URL fuera de la aplicación se abren en una aplicación externa adecuada, no se cargan en Web View. No se recomienda invalidar el comportamiento predeterminado.

Mantener actualizado el objeto Web View en las aplicaciones implementadas

De forma predeterminada, el control BlazorWebView usa el Web View nativo y específico de la plataforma instalado actualmente. Dado que el Web View nativo se actualiza periódicamente con compatibilidad con nuevas API y correcciones para problemas de seguridad, puede ser necesario asegurarse de que una aplicación usa una versión de Web View que cumpla los requisitos de la aplicación.

Use uno de los enfoques siguientes para mantener la Web View actual en las aplicaciones implementadas:

  • En todas las plataformas: compruebe la versión de la Web View y pida al usuario que realice los pasos necesarios para actualizarla.
  • Solo en Windows: empaquete una Web View de versión fija dentro de la aplicación, usándola en lugar de la Web View compartida del sistema.

Android

Android Web View se distribuye y actualiza a través de Google Play Store. Compruebe la versión de Web View leyendo la cadena User-Agent. Lea la propiedad de Web Viewnavigator.userAgent mediante la interoperabilidad de JavaScript y, opcionalmente, almacene en caché el valor mediante un servicio singleton si la cadena del agente de usuario es necesaria fuera de un contexto de componente Razor.

Al usar Android Emulator:

  • Use un dispositivo emulado con Google Play Services preinstalado. No se admiten dispositivos emulados sin Google Play Services preinstalado.
  • Instale Google Chrome desde Google Play Store. Si Google Chrome ya está instalado, actualice Chrome desde Google Play Store. Si un dispositivo emulado no tiene instalada la versión más reciente de Chrome, es posible que no tenga instalada la versión más reciente de Android Web View.

iOS/Mac Catalyst

iOS y Mac Catalyst usan WKWebView, un control basado en Safari, que el sistema operativo actualiza. De forma similar al caso de Android, determine la versión de Web View mediante la lectura de la cadena User-Agent de Web View.

Windows (.NET MAUI, WPF, Windows Forms)

En Windows, se requiere el Microsoft Edge basado en Chromium WebView2 para ejecutar aplicaciones web Blazor.

De forma predeterminada, se usa la versión instalada más reciente de WebView2, conocida como Evergreen distribution. Si desea enviar una versión específica de WebView2 con la aplicación, use Fixed Version distribution.

Para obtener más información sobre cómo comprobar la versión de WebView2 instalada actualmente y los modos de distribución, consulte la documentación de distribución de WebView2.

Recursos adicionales