Вопросы безопасности для ASP.NET Core Blazor Hybrid

Примечание.

Это не последняя версия этой статьи. В текущем выпуске см . версию .NET 8 этой статьи.

Внимание

Эта информация относится к предварительному выпуску продукта, который может быть существенно изменен до его коммерческого выпуска. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.

В текущем выпуске см . версию .NET 8 этой статьи.

В этой статье рассматриваются вопросы безопасности для приложений Blazor Hybrid.

Приложения Blazor Hybrid, которые отрисовывают веб-содержимое, выполняют код .NET внутри платформы Web View. Этот код .NET взаимодействует с веб-содержимым через канал взаимодействия между кодом .NET и Web View.

WebView и код .NET взаимодействуют внутри приложения для преобразования веб-содержимого.

Веб-содержимое, которое отрисовывается в Web View, может поступать из предоставляемых приложением ресурсов, расположенных в любом из следующих мест:

  • папка wwwroot в приложении;
  • внешний для приложения источник, например, размещенный в Интернете или другой сети.

Существует граница доверия между кодом .NET и кодом, который выполняется внутри Web View. Код .NET предоставляется приложением и любыми доверенными сторонними пакетами, которые вы устанавливаете для него. После компиляции приложения .NET не могут измениться источники содержимого для кода Web View.

В отличие от источников содержимого для кода .NET, для кода внутри Web View источники содержимого могут поступать не только из приложения, но и из внешних источников. Например, Web View приложения может использовать или отрисовывать статические ресурсы из внешней сети доставки содержимого (CDN).

Код внутри Web View следует считать ненадежным, аналогично коду, который выполняется в браузере для веб-приложения. К ненадежным ресурсам в приложениях Blazor Hybrid применяются те же угрозы и общие рекомендации по безопасности, что и в других типах приложений.

По возможности избегайте загрузки содержимого из стороннего источника. Чтобы снизить риск, вы можете передавать содержимое непосредственно из приложения, скачав внешние ресурсы и убедившись, что они безопасны для передачи пользователям, а затем разместив их в папке wwwroot приложения для упаковки с остальной частью приложения. При скачивании внешнего содержимого для включения в приложение проверьте его на наличие вирусов и вредоносных программ, прежде чем помещать содержимое в папку wwwroot приложения.

Если приложение должно ссылаться на содержимое из внешнего источника, мы рекомендуем использовать стандартные подходы к обеспечению веб-безопасности и предоставить приложению возможность заблокировать загрузку скомпрометированного содержимого.

Даже если все ресурсы упакованы в приложение и не загружаются из внешних источников, не забывайте о возможных проблемах в коде ресурсов, которые выполняются внутри Web View, так как эти ресурсы могут иметь уязвимости, разрешающие атаки межсайтовых сценариев (XSS).

Как правило, платформа Blazor успешно защищает от XSS благодаря безопасным методам работы с HTML. Но некоторые шаблоны программирования позволяют компонентам Razor внедрять необработанный HTML-код в отображаемые выходные данные, например при отображении содержимого из недоверенного источника. Например, избегайте отображения любого содержимого в формате HTML из базы данных без дополнительной проверки. Кроме того, используемые приложением библиотеки JavaScript могут небезопасно обрабатывать содержимое в формате HTML или намеренно отображать небезопасные выходные данные.

По этим причинам мы рекомендует применять все те же методы защиты от XSS, которые рекомендуются для веб-приложений. Запретите загрузку скриптов из неизвестных источников и не внедряйте потенциально небезопасные функции JavaScript, например eval и другие небезопасные примитивы JavaScript. Мы рекомендуем создать политику безопасности содержимого, чтобы снизить эти риски безопасности.

Если код внутри Web View будет скомпрометирован, он получит ко всему содержимому внутри Web View и сможет взаимодействовать с узлом через канал взаимодействия. По этой причине любое содержимое, поступающее из Web View (события или взаимодействия с JS), должно считаться ненадежным и проверяться так же, как и в других контекстах работы с конфиденциальными данными, например в скомпрометированном приложении Blazor Server, которое может привести к вредоносным атакам на хост-систему.

Не храните конфиденциальную информацию, например учетные данные, маркеры безопасности или конфиденциальные данные пользователей, в контексте Web View, так как это предоставит злоумышленнику доступ к этой информации в случае компрометации Web View. Существуют более безопасные альтернативы, как например обработка конфиденциальной информации во внутренней части приложения.

Внешнее содержимое, отображаемое в iframe

При использовании iframe для отображения внешнего содержимого на странице Blazor Hybrid рекомендуется использовать функции песочницы, чтобы изолировать содержимое от родительской страницы с основным приложением. В следующем Razor примере компонента атрибут присутствует для тега<iframe>, sandbox чтобы применить к странице функции admin.html песочницы:

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

Предупреждение

Атрибут sandboxне поддерживается в ранних версиях браузера. Дополнительные сведения см. на странице Можно ли использовать sandbox.

По умолчанию ссылки на URL-адреса за пределами приложения открываются в соответствующем внешнем приложении, а не загружаются в Web View. Не рекомендуется переопределять поведение по умолчанию.

Сохранение актуальности Web View для развернутых приложений

По умолчанию элемент управления BlazorWebView использует собственный объект Web View для определенной платформы. Так как собственный объект Web View периодически обновляется для поддержки новых API и исправления проблем с безопасностью, может потребоваться убедиться в том, что приложение использует ту версию Web View, которая соответствует требованиям приложения.

Используйте один из следующих подходов, чтобы обеспечить актуальность Web View в развернутых приложениях:

  • На всех платформах проверьте версию Web View и предложите пользователю выполнить все необходимые действия для его обновления.
  • Только для Windows: упакуйте определенную версию Web View в приложение, чтобы использовать ее вместо системной версии Web View.

Android

Web View для Android распространяется и обновляется через Магазин Google Play. Проверьте версию Web View, прочитав строку User-Agent. Прочитайте у Web View свойство navigator.userAgent с помощью взаимодействия JavaScript и при необходимости кэшируйте значение с помощью одноэлементной службы, если строка агента пользователя требуется за пределами контекста компонента Razor.

При использовании эмулятора Android:

  • Используйте эмулированное устройство с предварительно установленными службами Google Play. Эмулированные устройства без предварительно установленных служб Google Play не поддерживаются.
  • Установите Google Chrome из Google Play Store. Если Google Chrome уже установлен, обновите Chrome из Google Play Store. Если эмулированное устройство не установлено последней версии Chrome, возможно, не установлена последняя версия Android Web View .

iOS/Mac Catalyst

iOS и Mac Catalyst используют WKWebView, элемент управления на основе Safari, который обновляется операционной системой. Как и в случае Android, определите версию Web View, прочитав у Web View строку User-Agent.

Windows (.NET MAUI, WPF, Windows Forms)

В Windows для запуска веб-приложений Blazor требуется Microsoft Edge WebView2 на основе Chromium.

По умолчанию используется последняя установленная версия WebView2 (так называемый Evergreen distribution). Если вы хотите передать с приложением определенную версию WebView2, используйте Fixed Version distribution.

Дополнительные сведения о проверке текущей установленной версии WebView2 и режимах дистрибуции см. в документации по распространению WebView2.

Дополнительные ресурсы