WebView2 を使用すると、開発者はネイティブ アプリケーションで Web コンテンツをホストできます。 正しく使用すると、Web コンテンツをホストすることには、Web ベースの UI の使用、Web プラットフォームの機能へのアクセス、クロスプラットフォームでのコードの共有など、いくつかの利点があります。
Web ブラウザーでは、サンドボックス環境では Web サイトの権限が制限されます。 ただし、ネイティブ アプリケーションで Web コンテンツをホストする場合、Web コンテンツはネイティブ アプリケーションのリソースと API にアクセスできます。 これにより、Web コンテンツがホスト アプリケーションから適切に分離されていない場合、セキュリティの脆弱性が生じる可能性があります。 これらの脆弱性を回避するには、以下の方法に従って WebView2 アプリケーションのセキュリティを向上させます。
すべての Web コンテンツを安全でないものとして扱う
特に、
ExecuteScript、PostWebMessageAsJson、PostWebMessageAsStringなどの方法を使用して WebView2 コントロールに情報を送信する前に、常に WebView2 内で実行されているドキュメントの配信元をチェックし、コンテンツの信頼性を評価します。 WebView2 コントロールは、エンド ユーザーがページまたはナビゲーションの原因となっているページ内のスクリプトを操作することを介して、別のページに移動した可能性があります。 ドキュメントの配信元は、WebView2 コントロールのSourceプロパティから取得できます。AddScriptToExecuteOnDocumentCreatedに注意してください。 将来のすべてのnavigationsは同じスクリプトを実行し、そのスクリプトが特定の配信元のみを意図した情報へのアクセスを提供する場合、任意の HTML ドキュメントがネイティブ アプリケーションのリソースと API にアクセスできる可能性があります。Web メッセージとパラメーターは (意図せず、または悪意のある) 形式が正しくない可能性があり、アプリが予期しない動作をする可能性があるため、それらを使用する前に Web メッセージとホスト オブジェクト パラメーターを検証してください。
WebMessageReceivedイベントであるExecuteScriptメソッド呼び出しの結果を調べるときは、常に WebView2 コントロールのSourceプロパティチェック送信者のソースをチェックするか、WebView2 コントロールで HTML ドキュメントから情報を受信するその他のメカニズムをチェックして、HTML ドキュメントの URI が期待どおりであることを検証します。
汎用プロキシを避ける
汎用プロキシを使用するのではなく、特定の Web メッセージを設計し、オブジェクトの相互作用をホストします。
PostWebMessageAsJson を使用してメッセージを送信する
PostWebMessageAsJson メソッドを使用して、WebView2 コントロールにメッセージを送信します。 WebView2 コントロールに送信するメッセージを作成する場合は、 PostWebMessageAsJson を使用し、JSON ライブラリを使用して JSON 文字列パラメーターを構築することをお勧めします。 これにより、情報を JSON 文字列またはスクリプトにエンコードする際の潜在的な事故を回避し、攻撃者が制御する入力が JSON メッセージの残りの部分を変更したり、任意の JavaScript コードを実行したりすることはできません。
Web コンテンツ機能を制限する
必要がない場合は、Web コンテンツ機能を制限します。 次のように、 CoreWebView2Settings の WebView2 プロパティを更新して、Web コンテンツの機能を制限します。
Web コンテンツがホスト オブジェクトにアクセスしないことが想定されている場合は、[
AreHostObjectsAllowed] を [false] に設定します。Web コンテンツで Web メッセージがネイティブ アプリケーションに投稿されることが想定されない場合は、[
IsWebMessageEnabled] を [false] に設定します。Web コンテンツでスクリプトが実行されることを予期しない場合 (たとえば、静的な HTML コンテンツを表示している場合)、
IsScriptEnabledをfalseに設定します。Web コンテンツに
alertダイアログまたはpromptダイアログが表示されない場合は、[AreDefaultScriptDialogsEnabled] を [false] に設定します。
新しいページの配信元に基づいて設定を更新する
次のように、新しいページの配信元に基づいて設定を更新します。
アプリケーションが特定のページに移動できないようにするには、
NavigationStartingイベントとFrameNavigationStartingイベントを使用してページ ナビゲーションまたはフレーム ナビゲーションをチェックし、条件付きでナビゲーションをブロックします。新しいページに移動するときには、前の「Web コンテンツ機能を制限する」で説明したように、新しいページのセキュリティ要件と一致するように
CoreWebView2Settingsオブジェクトのプロパティ値を調整する必要がある場合があります。
公開されているホスト オブジェクトを削除する
新しいドキュメントに移動するときは、 ContentLoading イベントと RemoveHostObjectFromScript を使用して、公開されているホスト オブジェクトを削除します。
WebView2 はシステム ユーザーとして実行できません
WebView2 はシステム ユーザーとして実行できません。 この制限により、資格情報プロバイダーの構築などのシナリオがブロックされます。
WebView2 ホスト アプリケーションに推奨される特権レベル
セキュリティに関するベスト プラクティスとして、標準の (管理者特権ではない) ユーザー整合性で実行されるプロセスで WebView2 をホストすることをお勧めします。 最小特権の原則に従い、アプリケーションは、昇格された (管理者) 特権で WebView2 ホスティング コンポーネントを実行しないようにする必要があります。
アプリケーションで特定の操作に対して昇格された特権が必要な場合は、その作業を個別の専用プロセスで分離し、WebView2 ホスト コンポーネントの昇格解除された状態を維持することをお勧めします。 これにより、ブラウザー ホスティング画面が必要とされる最小の特権レベルに維持され、推奨される Windows アプリケーションのセキュリティ プラクティスと一致します。
管理者特権のホスト アプリの場合は、適切なオーバーライド フラグを使用します
管理者特権の WebView2 ホスト アプリ プロセスの場合は、適切な種類のオーバーライド フラグを使用します。 昇格されたプロセスは、高整合性レベル (高 IL) プロセスです。 標準ユーザーが変更できる構成から管理者特権のプロセスを保護するために、WebView2 は、ホスト プロセスが管理者特権で実行されているときに、特定のユーザー スコープのオーバーライド メカニズムを無視します。
ホスト プロセスが管理者特権で実行されている場合:
WEBVIEW2_*環境変数のオーバーライド (フラグ) は、WEBVIEW2_ADDITIONAL_BROWSER_ARGUMENTSを含めて無視されます。 参照:- WebView2 ブラウザー フラグのローカル デバイス環境でブラウザー フラグを設定します。
WebView2 API を介して WebView2 アプリ内で指定された構成フラグが適用されます。 参照:
- WebView2 ブラウザー フラグのコードを使用して、プログラムでブラウザー フラグを設定します。
HKEY_CURRENT_USER(HKCU) ポリシーのオーバーライドは無視されます。 参照:- でチャネルの検索順序を切り替える (推奨) プレビュー チャネルに切り替えて、今後の API と機能をテストする - [レジストリ キー] タブを選択し、[
HKCUを検索] を選択します。 -
ChannelSearchKindを使用して、特定のチャネルが使用されていることを確認する方法プレビュー チャネルに切り替えて、今後の API と機能をテストする - [レジストリ キー] タブを選択し、[HKCUを検索] を選択します。 -
プレビュー チャネルに切り替えて今後の API と機能をテストする(ローカル テスト用) ブラウザー実行可能ファイル フォルダーの設定 - [レジストリ キー] タブを選択し、[
HKCUを検索] を選択します。 -
Visual Studio Code を使用して WebView2 アプリをデバッグ する -
HKEY_CURRENT_USERを検索します。
- でチャネルの検索順序を切り替える (推奨) プレビュー チャネルに切り替えて、今後の API と機能をテストする - [レジストリ キー] タブを選択し、[
AdditionalBrowserArgumentsHKCU未満のレジストリのオーバーライドは無視されます。HKEY_LOCAL_MACHINE(HKLM) ポリシーのオーバーライドが適用されます。 参照:- でチャネルの検索順序を切り替える (推奨) プレビュー チャネルに切り替えて、今後の API と機能をテストする - [レジストリ キー] タブを選択し、[
HKLMを検索] を選択します。 -
ChannelSearchKindを使用して、特定のチャネルが使用されていることを確認する方法プレビュー チャネルに切り替えて、今後の API と機能をテストする - [レジストリ キー] タブを選択し、[HKLMを検索] を選択します。 -
プレビュー チャネルに切り替えて今後の API と機能をテストする(ローカル テスト用) ブラウザー実行可能ファイル フォルダーの設定 - [レジストリ キー] タブを選択し、[
HKLMを検索] を選択します。
- でチャネルの検索順序を切り替える (推奨) プレビュー チャネルに切り替えて、今後の API と機能をテストする - [レジストリ キー] タブを選択し、[
管理者特権ではない WebView2 アプリは、サポートされているすべてのオーバーライド メカニズムを尊重します。
関連項目:
- アプリと WebView2 ランタイムを配布 する - "管理者特権" を検索します。