セキュリティで保護された WebView2 アプリを開発する
WebView2 を使用すると、開発者はネイティブ アプリケーションで Web コンテンツをホストできます。 Web コンテンツを正しく使用すると、Web ベースの UI の使用、Web プラットフォームの機能へのアクセス、コードクロスプラットフォームの共有など、いくつかの利点があります。
Web ブラウザーでは、Web サイトにはサンドボックス環境で制限された権限が付与されます。 ただし、ネイティブ アプリケーションで Web コンテンツをホストする場合、Web コンテンツはネイティブ アプリケーションのリソースと API にアクセスできます。 これにより、Web コンテンツがホスト アプリケーションから適切に分離されていない場合、セキュリティの脆弱性が発生する可能性があります。 これらの脆弱性を回避するには、以下のプラクティスに従って、WebView2 アプリケーションのセキュリティを強化します。
すべての Web コンテンツを安全でないものとして扱う
WebView2 内で実行されているドキュメントの配信元を常に確認し、特に
ExecuteScript
、PostWebMessageAsJson
、PostWebMessageAsString
、またはその他のメソッドを使用して WebView2 コントロールに情報を送信する前に、コンテンツの信頼性を評価します。 WebView2 コントロールは、エンド ユーザーがページまたはページ内のスクリプトを操作してナビゲーションを引き起こして、別のページに移動した可能性があります。 ドキュメントの配信元は、WebView2 コントロールのSource
プロパティから取得できます。AddScriptToExecuteOnDocumentCreated
には注意してください。 今後navigations
はすべて同じスクリプトを実行し、そのスクリプトが特定の配信元のみを対象とする情報にアクセスできる場合、HTML ドキュメントはネイティブ アプリケーションのリソースと API にアクセスできる可能性があります。Web メッセージとホスト オブジェクト パラメーターは、Web メッセージとパラメーターの形式が正しくない (意図せず、または悪意を持って) 可能性があり、アプリが予期せず動作する可能性があるため、使用する前に Web メッセージとホスト オブジェクト パラメーターを検証します。
WebMessageReceived
イベントであるExecuteScript
メソッド呼び出しの結果を調べる場合は、常に WebView2 コントロールのSource
プロパティを確認して送信者のソースを確認するか、WebView2 コントロール内の HTML ドキュメントから情報を受信するその他のメカニズムを確認して、HTML ドキュメントの URI が想定どおりであることを検証します。
汎用プロキシを回避する
汎用プロキシを使用する代わりに、特定の Web メッセージとホスト オブジェクトの相互作用を設計します。
PostWebMessageAsJson
を使用してメッセージを送信する
PostWebMessageAsJson
メソッドを使用して、WebView2 コントロールにメッセージを送信します。 WebView2 コントロールに送信するメッセージを作成する場合は、 PostWebMessageAsJson
を使用し、JSON ライブラリを使用して JSON 文字列パラメーターを構築します。 これにより、JSON 文字列またはスクリプトへのエンコード情報の潜在的な誤りを回避し、攻撃者が制御する入力が JSON メッセージの残りの部分を変更したり、任意の JavaScript コードを実行したりできないようにします。
Web コンテンツ機能を制限する
必要がない場合は、Web コンテンツ機能を制限します。 次のように、web コンテンツの機能を制限するように、 CoreWebView2Settings
の WebView2 プロパティを更新します。
Web コンテンツがホスト オブジェクトにアクセスすることを想定していない場合は、
AreHostObjectsAllowed
をfalse
に設定します。Web コンテンツがネイティブ アプリケーションに Web メッセージを投稿することを想定していない場合は、
IsWebMessageEnabled
をfalse
に設定します。Web コンテンツでスクリプトを実行することが想定されていない場合 (静的 HTML コンテンツを表示する場合など) は、
IsScriptEnabled
をfalse
に設定します。Web コンテンツに
alert
またはprompt
ダイアログが表示されない場合は、AreDefaultScriptDialogsEnabled
をfalse
に設定します。
新しいページの配信元に基づいて設定を更新する
次のように、新しいページの配信元に基づいて設定を更新します。
アプリケーションが特定のページに移動しないようにするには、
NavigationStarting
イベントとFrameNavigationStarting
イベントを使用してページまたはフレームのナビゲーションを確認し、条件付きでナビゲーションをブロックします。新しいページに移動するときは、上記の「Web コンテンツ機能を制限する」で説明されているように、新しいページのセキュリティ要件に合わせて、
CoreWebView2Settings
オブジェクトのプロパティ値を調整する必要がある場合があります。
公開されているホスト オブジェクトを削除する
新しいドキュメントに移動するときは、 ContentLoading
イベントと RemoveHostObjectFromScript
を使用して、公開されているホスト オブジェクトを削除します。
WebView2 をシステム ユーザーとして実行することはできません
WebView2 をシステム ユーザーとして実行することはできません。 この制限により、資格情報プロバイダーの構築などのシナリオがブロックされます。