ASP.NET Core Blazor Hybrid のセキュリティに関する考慮事項

注意

これは、この記事の最新バージョンではありません。 現在のリリースについては、この記事の .NET 8 バージョンを参照してください。

警告

このバージョンの ASP.NET Core はサポート対象から除外されました。 詳細については、「.NET および .NET Core サポート ポリシー」を参照してください。 現在のリリースについては、この記事の .NET 8 バージョンを参照してください。

重要

この情報はリリース前の製品に関する事項であり、正式版がリリースされるまでに大幅に変更される可能性があります。 Microsoft はここに示されている情報について、明示か黙示かを問わず、一切保証しません。

現在のリリースについては、この記事の .NET 8 バージョンを参照してください。

この記事では、Blazor Hybrid アプリのセキュリティ上の考慮事項について説明します。

Web コンテンツをレンダリングする Blazor Hybrid アプリでは、プラットフォーム Web View 内で .NET コードが実行されます。 .NET コードは、.NET コードと Web View の間の相互運用チャネルを通じて Web コンテンツとやり取りします。

アプリ内での Web ビューと .NET コードの相互運用により Web コンテンツがレンダリングされます。

Web View へとレンダリングされる Web コンテンツは、アプリによって次のいずれかの場所から提供されるアセットから取得できます。

  • アプリ内の wwwroot フォルダー。
  • アプリの外部のソース。 たとえば、インターネットなどのネットワーク ソースです。

.NET コードと Web View 内で実行されるコードの間には、信頼境界が存在します。 .NET コードは、アプリと、インストールした信頼済みのサード パーティ製パッケージによって提供されます。 アプリのビルド後に、.NET コードの Web View コンテンツ ソースを変更することはできません。

コンテンツの .NET コード ソースとは対照的に、Web View 内で実行されるコードのコンテンツ ソースは、アプリからだけでなく、外部ソースからも取得できます。 たとえば、外部コンテンツ配信ネットワーク (CDN) の静的アセットは、アプリの Web View によって使用またはレンダリングされる場合があります。

Web View 内のコードは、Web アプリ用のブラウザー内で実行されているコードと同様、未信頼のコードであると考えてください。 Blazor Hybrid アプリ内の未信頼リソースには、他の種類のアプリの場合と同様、脅威と一般的なセキュリティに関する推奨事項が適用されます。

可能であれば、サードパーティの配信元からコンテンツを読み込むことは避けてください。 リスクを軽減する方法としては、外部アセットをダウンロードし、ユーザーに安全に提供できることを確認した後、それらをアプリの wwwroot フォルダーに配置し、アプリの rest と一緒にパッケージ化することで、アプリからコンテンツを直接提供できるようにするという方法も考えられます。 外部コンテンツをダウンロードしてアプリに含める場合は、アプリの wwwroot フォルダーに配置する前に、ウイルスやマルウェアをスキャンすることをお勧めします。

アプリから外部の配信元のコンテンツを参照する必要がある場合は、一般的な Web セキュリティ アプローチとして、コンテンツが侵害された場合にコンテンツの読み込みをブロックするための機構をアプリに組み込むことをお勧めします。

すべてのリソースがアプリ内にパックされ、外部の配信元からは読み込まれない場合でも、Web View 内で実行されるリソースのコードの問題には注意してください。それらのリソースには、クロスサイト スクリプティング (XSS) 攻撃を可能にする恐れのある脆弱性が存在している可能性があります。

一般に、Blazor フレームワークでは HTML を安全な方法で処理することにより、XSS が防止されます。 ただし、一部のプログラミング パターンでは、Razor コンポーネントによって未加工の HTML がレンダリング後の出力に挿入されます (未信頼のソースからのコンテンツがレンダリングされるなど)。 たとえば、HTML コンテンツをデータベースから直接レンダリングするようなことは避ける必要があります。 さらに、アプリで使用される JavaScript ライブラリでは、HTML が安全でない方法で操作され、安全でない出力が不注意によって、または意図的にレンダリングされる可能性があります。

これらの理由から、XSS に対しては、Web アプリに通常適用されるのと同じ保護を適用することをお勧めします。 不明なソースからはスクリプトを読み込まないようにし、安全でない可能性のある JavaScript 機能 (eval や、その他の安全でない JavaScript プリミティブなど) は実装しないようにしてください。 これらのセキュリティ リスクを軽減するには、CSP を確立することをお勧めします。

Web View 内部のコードが侵害された場合、そのコードは Web View 内部のすべてのコンテンツにアクセスできるようになり、場合によっては、相互運用チャネルを介してホストとやり取りできるようになります。 そのため、Web View (イベント、JS 相互運用) からのコンテンツは未信頼のコンテンツとして扱い、その他の機密性の高いコンテキストの場合と同じ方法で検証する必要があります (ホスト システムに対して悪意のある攻撃を行う可能性がある、侵害された Blazor Server アプリなど)。

資格情報、セキュリティ トークン、機密性の高いユーザー データなどの機密情報は、Web View のコンテキストには格納しないようにしてください。Web View が侵害された場合、攻撃者がそれらの情報を利用できるようになります。 より安全な代替手段としては、機密情報をアプリのネイティブ部分の内部で直接処理するなどといった方法があります。

iframe でレンダリングされる外部コンテンツ

iframe を使用して Blazor Hybrid ページ内で外部コンテンツを表示する場合、ユーザーはサンドボックス機能を利用して、コンテンツがアプリを含む親ページから分離されるようにすることをお勧めします。 次の Razor コンポーネントの例で、sandbox 属性は、サンドボックス機能を admin.html ページに適用する <iframe> タグのために存在します。

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

警告

この sandbox 属性は、ブラウザーの初期バージョンではサポートされていません。 詳細については、「Can I use: 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

Android Web View は、Google Play ストア経由で配布および更新されます。 Web View のバージョンを確認するには、User-Agent 文字列を読み取ります。 JavaScript 相互運用機能を使用して Web View の navigator.userAgent プロパティを読み取り、必要に応じて、Razor コンポーネント コンテキストの外部でユーザー エージェント文字列が必要な場合は、シングルトン サービスを使用して値をキャッシュします。

Android エミュレーターを使用する場合:

  • Google Play Services がプレインストールされたエミュレートされたデバイスを使用します。 Google Play 開発者サービスがプレインストールされていないエミュレートされたデバイスはサポート されていません 。
  • Google Play ストアから Google Chrome をインストールします。 Google Chrome が既にインストールされている場合は、 Google Play ストアから Chrome を更新します。 エミュレートされたデバイスに Chrome の最新バージョンがインストールされていない場合は、最新バージョンの Android Web View がインストールされていない可能性があります。

iOS/Mac Catalyst

iOS と Mac Catalyst は両方とも、オペレーティング システムによって更新される Safari ベースのコントロール WKWebView を使用します。 Android の場合と同様に、Web View の User-Agent 文字列を読み取って Web View のバージョンを決定します。

Windows (.NET MAUI、WPF、Windows フォーム)

Windows では、Blazor Web アプリを実行するには Chromium ベースの Microsoft EdgeWebView2 が必要です。

インストールされている最新バージョンの WebView2 (Evergreen distribution と呼ばれます) が使用されます。 アプリと共に特定のバージョンの WebView2 を配布したい場合は、Fixed Version distribution を使います。

現在インストールされている WebView2 のバージョンと配布モードを確認する方法の詳細については、WebView2 の配布に関するドキュメントを参照してください。

その他のリソース