开发安全的 WebView2 应用

WebView2 控件允许开发人员在本机应用程序中托管 Web 内容。 正确使用时,托管 Web 内容具有多种优势,例如使用基于 Web 的 UI、访问 Web 平台的功能、跨平台共享代码等。 若要避免托管 Web 内容时可能出现的漏洞,请确保将 WebView2 应用程序设计为密切监视 Web 内容与主机应用程序之间的交互。

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

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

    • 始终检查在 WebView2 中运行的文档的来源,并评估内容的可信度。

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

  • 通过修改 ICoreWebView2Settings (Win32) CoreWebView2Settings (.NET) ,设置以下选项以限制 Web 内容功能:

    • false如果不希望 Web 内容访问主机对象,请将 设置为 AreHostObjectsAllowed

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

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

    • false如果不希望显示 alert Web 内容或prompt对话框,请将 设置为 AreDefaultScriptDialogsEnabled

  • 基于新页面的原点更新设置:

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

    • 导航到新页面时,可能需要调整 ICoreWebView2Settings (Win32) CoreWebView2Settings (.NET) 上的属性值,如前所述。

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

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