Compartir vía


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 de .NET 9 de este artículo.

Advertencia

Esta versión de ASP.NET Core ya no se admite. Para obtener más información, consulta la Directiva de soporte técnico de .NET y .NET Core. Para la versión actual, consulta 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 de .NET 9 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.

Considera 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, evita cargar contenido de un origen de terceros. Para mitigar el riesgo, podrías 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 rest 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, sigue 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. Evita cargar scripts de orígenes desconocidos y no implementes 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 almacenes 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 ciberdelincuente si Web View se ve 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 sandbox no se admite en versiones anteriores del explorador. Para obtener más información, consulta Puedo usar: sandbox.

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

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.

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

  • En todas las plataformas: comprueba la versión de la Web View y pide al usuario que realice los pasos necesarios para actualizarla.
  • Solo en Windows: empaqueta 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. Comprueba la versión de Web View leyendo la cadena User-Agent. Lee la propiedad navigator.userAgent de Web View mediante la interoperabilidad de JavaScript y, opcionalmente, almacena 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:

  • Usa un dispositivo emulado con Google Play Services preinstalado. No se admiten dispositivos emulados sin Google Play Services preinstalado.
  • Instala Google Chrome desde Google Play Store. Si Google Chrome ya está instalado, actualiza Chrome desde Google Play Store. Si un dispositivo emulado no tiene instalada la versión más reciente de Chrome, es posible que no tengas 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, determina 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.

Se usa la versión instalada más reciente de WebView2, conocida como Evergreen distribution. Si deseas enviar una versión específica de WebView2 con la aplicación, usa 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, consulta la documentación de distribución de WebView2.

Recursos adicionales