ASP.NET Core Blazor Hybrid のセキュリティに関する考慮事項
注意
これは、この記事の最新バージョンではありません。 現在のリリースについては、この記事の .NET 9 バージョンを参照してください。
警告
このバージョンの ASP.NET Core はサポート対象から除外されました。 詳細については、「.NET および .NET Core サポート ポリシー」を参照してください。 現在のリリースについては、この記事の .NET 8 バージョンを参照してください。
重要
この情報はリリース前の製品に関する事項であり、正式版がリリースされるまでに大幅に変更される可能性があります。 Microsoft はここに示されている情報について、明示か黙示かを問わず、一切保証しません。
現在のリリースについては、この記事の .NET 9 バージョンを参照してください。
この記事では、Blazor Hybrid アプリのセキュリティ上の考慮事項について説明します。
Web コンテンツをレンダリングする Blazor Hybrid アプリでは、プラットフォーム Web View 内で .NET コードが実行されます。 .NET コードは、.NET コードと Web View の間の相互運用チャネルを通じて 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 セキュリティ アプローチとして、コンテンツが侵害された場合にコンテンツの読み込みをブロックするための機構をアプリに組み込むことをお勧めします。
- TLS/HTTPS を使用してコンテンツを安全に提供する。
- コンテンツ セキュリティ ポリシー (CSP) を設定する。
- サブリソースの整合性チェックを実行する。
すべてのリソースがアプリ内にパックされ、外部の配信元からは読み込まれない場合でも、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 へのリンク
アプリ外の 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
の配布に関するドキュメントを参照してください。
その他のリソース
ASP.NET Core