开发安全的 WebView2 应用

WebView2 允许开发人员在本机应用程序中托管 Web 内容。 如果使用得当,托管 Web 内容具有多种优势,例如使用基于 Web 的 UI、访问 Web 平台的功能或跨平台共享代码。

在 Web 浏览器中,网站在沙盒环境中被授予有限权限。 但是,在本机应用程序中托管 Web 内容时,Web 内容可以访问本机应用程序的资源和 API。 如果 Web 内容未正确与主机应用程序隔离,则可能导致安全漏洞。 若要避免这些漏洞,请遵循以下做法来提高 WebView2 应用程序的安全性。

将所有 Web 内容视为不安全内容

  • 始终检查在 WebView2 中运行的文档的来源,并评估内容的可信度,尤其是在使用 ExecuteScriptPostWebMessageAsJsonPostWebMessageAsString或任何其他方法将信息发送到 WebView2 控件之前。 WebView2 控件可能已通过最终用户与导致导航的页面中的页面或脚本交互导航到另一个页面。 可以从 WebView2 控件的属性中 Source 获取文档的源。

  • 请小心 AddScriptToExecuteOnDocumentCreated. 所有 navigations 后续都运行相同的脚本,如果该脚本提供对仅适用于特定来源的信息的访问权限,则任何 HTML 文档都可以访问本机应用程序的资源和 API。

  • 在使用前先验证 Web 消息和主机对象参数,因为 Web 消息和参数可能格式错误 (无意或恶意) ,并可能导致应用出现意外行为。

  • 检查方法调用的结果ExecuteScript(事件WebMessageReceived)时,请始终检查 Source WebView2 控件的属性以检查发件人的源,或检查从 WebView2 控件中的 HTML 文档接收信息的任何其他机制,以验证 HTML 文档的 URI 是否是你所期望的。

避免使用通用代理

设计特定的 Web 消息和主机对象交互,而不是使用通用代理。

用于 PostWebMessageAsJson 发送消息

使用该 PostWebMessageAsJson 方法将消息发送到 WebView2 控件。 在构造要发送到 WebView2 控件的消息时,首选使用 PostWebMessageAsJson JSON 库并构造 JSON 字符串参数。 这避免了将信息编码为 JSON 字符串或脚本的任何潜在意外,并确保任何攻击者控制的输入都无法修改 JSON 消息的其余部分或运行任意 JavaScript 代码。

限制 Web 内容功能

如果不需要,则限制 Web 内容功能。 更新 WebView2 属性 CoreWebView2Settings 以限制 Web 内容的功能,如下所示:

  • 如果您不希望 Web 内容访问主机对象,则设置为 AreHostObjectsAllowedfalse

  • 如果不希望 Web 内容将 Web 消息发布到本机应用程序,请设置为 IsWebMessageEnabledfalse

  • IsScriptEnabled false如果不希望 Web 内容运行脚本,则设置为 (例如,在显示静态 HTML 内容) 时。

  • 如果不希望 Web 内容显示或显示对话框,请设置为 AreDefaultScriptDialogsEnabledfalsepromptalert

基于新页面的来源更新设置

基于新页面的来源更新设置,如下所示:

  • 若要防止应用程序导航到某些页面,请使用 and NavigationStartingFrameNavigationStarting 事件检查页面或框架导航,然后有条件地阻止导航。

  • 导航到新页面时,可能需要调整对象上的 CoreWebView2Settings 属性值以匹配新页面的安全要求,如上面的限制 Web 内容功能中所述。

删除公开的主机对象

导航到新文档时,请使用 ContentLoading 事件 和 RemoveHostObjectFromScript 删除公开的主机对象。

无法以系统用户身份运行 WebView2

无法以系统用户身份运行 WebView2。 此限制阻止生成凭据提供程序等方案。

作为安全最佳做法,我们建议在以标准 (非提升) 用户完整性运行的进程中托管 WebView2。 遵循最低特权原则,应用程序应避免使用提升的 (管理员) 权限运行 WebView2 托管组件。

如果应用程序需要提升权限来执行某些操作,建议在单独的专用进程中隔离该工作,并使 WebView2 主机组件保持解除状态。 这可使浏览器托管表面保持在必要的最低权限级别,并符合建议的 Windows 应用程序安全做法。

对于提升的主机应用,请使用适当的替代标志

对于提升的 WebView2 主机应用进程,请使用适当类型的替代标志。 提升工艺是高完整性级别 (高 IL) 工艺。 为了帮助保护提升的进程免受标准用户修改的配置的影响,WebView2 在主机进程以提升权限运行时会忽略某些用户范围的替代机制。

当主机进程以提升权限运行时:

非提升的 WebView2 应用遵循所有支持的替代机制。

另请参阅:

另请参阅