在应用程序中显示 Web 内容
在 iOS 中,Web 视图可用于显示各种 Web 内容,而无需离开应用的上下文。 某些应用程序还可能使用 Web 视图作为跨多个平台共享功能和 UI 的一种方式。
由于应用内存在 Web 视图,因此会将其公开给潜在的数据泄漏。 如果用户能够通过有意的应用设计或巧妙地纵呈现的网页 html 内容) 中公开的链接, (导航到应用内的任意外部网页,则用户可能能够从应用泄漏托管数据。
Intune MAM SDK 提供了多个 API,用于处理托管和非托管内容通过应用内的 Web 视图显示的不同方案。 仅当有托管用户登录到应用时,才需要调用这些 API。 请参阅下表,了解哪些 API 适用于哪个方案。
| 应用场景 | API |
|---|---|
| 仅用户和组织内容,没有任意网页的风险 | 无需 API |
| 仅非用户和非组织内容 | 在 中设置TreatAllWebViewsAsUnmanagedInfo.plist |
| 用户/组织和非用户/非组织内容混合 (大多数非用户/非组织) | 在 Info.plist 包含用户或组织数据的 Web 视图中设置 和使用setWebViewPolicy:forWebViewer:IntuneMAMWebViewPolicyCurrentIdentityTreatAllWebViewsAsUnmanaged |
| 用户/组织和非用户/非组织内容的混合 (多数用户/组织) |
setWebViewPolicy:forWebViewer:
IntuneMAMWebViewPolicyUnmanaged仅在不包含用户或组织数据的 Web 视图上使用 |
| 用户或组织内容,但存在任意网页的风险 | 在 适当地使用 TreatAllWebViewsAsUnmanaged 和 setWebViewPolicy:forWebViewer:之后,还会为可能导航到任意网页的 Web 视图实现IntuneMAMWebViewPolicyDelegate |
Web 视图方案 1:仅显示用户或组织内容的网页
如果应用仅使用 Web 视图作为呈现用户或组织内容的方式,并且 Web 视图没有导航到任意外部网页的风险,则无需使用任何 API 或设置。 默认情况下,SDK 会将应用内显示的任何 Web 视图视为属于当前 UI 策略标识的内容。
如果托管用户在应用中打开 Web 视图,则来自 Web 视图的任何剪切/复制数据都将被视为托管内容。 粘贴到 Web 视图中将根据托管帐户的策略进行处理。
如果非托管用户在应用中打开 Web 视图,则来自 Web 视图的任何剪切/复制数据都将被视为非托管内容。 粘贴到 Web 视图中将被视为由非托管帐户完成,并且不会施加其他限制。
Web 视图方案 2:仅不显示用户或组织内容的网页
如果应用知道它永远不会在 Web 视图中显示用户或组织内容,则可以在应用的 Info.plist中将 YES 设置为 TreatAllWebViewsAsUnmanaged 。 这会将 Web 视图中的任何用户执行的所有剪切、复制和粘贴作视为非托管作。 无论用于执行作的帐户的管理状态如何,该作都将被视为由非托管用户执行。
这样做可确保托管应用内容不会通过 Web 视图泄露到应用外部。 如果应用仅使用 Web 视图来显示隐私声明、EULA 或其他不需要用户查看的静态页面内容,则设置此标志是个好主意。
设置 后 TreatAllWebViewsAsUnmanaged ,Web 视图中显示的所有内容 都可以 复制并粘贴到其他非托管应用,因为 Web 视图本身被视为非托管。
Web 视图方案 3:用户/组织和非用户/非组织内容的混合
更复杂的应用可能会结合使用用户/组织和非用户/非组织 Web 视图。 应用可能使用 Web 视图来显示隐私声明,但也使用 Web 视图来显示用户内容。 在这种情况下, IntuneMAMPolicyManager可以使用 的 setWebViewPolicy:forWebViewer: API。 此 API 允许应用将单个 Web 视图标记为非托管或撤消对单个 Web 视图的影响 TreatAllWebViewsAsUnmanaged 。
API 采用两个参数。 第一个是 类型的枚举值 IntuneMAMWebViewPolicy 。 第二个可以是 UIView 或 UIViewController,其子视图层次结构中可能包含 WKWebView。 WKWebView 本身也可以作为第二个参数直接传入。
如果 WKWebView 是作为第二个参数传入的 UIView 或 UIViewController 的子级,则在调用此 API 时,它不必存在于视图层次结构中。 在 UIView 或 UIViewController 中传递的任何子 WKWebView 都将在添加时应用适当的策略。
-
IntuneMAMWebViewPolicyUnset- 这是所有 WKWebView 的默认策略。 将仅TreatAllWebViewsAsUnmanaged根据 标志处理 Web 视图。 -
IntuneMAMWebViewPolicyUnmanaged- 用户对此策略标记的 Web 视图执行的任何剪切/复制/粘贴作都将被视为由非托管标识执行。 此策略将覆盖标志TreatAllWebViewsAsUnmanaged。 -
IntuneMAMWebViewPolicyCurrentIdentity- 用户对此策略标记的 Web 视图执行的任何剪切/复制/粘贴作都将被视为由当前 UI 策略标识执行。 此策略将覆盖标志TreatAllWebViewsAsUnmanaged。
大多数非用户和非组织数据
如果应用内的大多数 Web 视图都显示非托管内容,则可以TreatAllWebViewsAsUnmanaged在应用的 Info.plist 中设置,并在setWebViewPolicy:forWebViewer:用户或组织内容 Web 视图上调用 。IntuneMAMWebViewPolicyCurrentIdentity
大多数用户和组织数据
如果应用内的大多数 Web 视图显示用户或组织内容,则只需要 setWebViewPolicy:forWebViewer: 在非托管 Web 视图上调用 with IntuneMAMWebViewPolicyUnmanaged ,因为默认情况下,所有 Web 视图都被视为托管视图。
Web 视图方案 4:用户或组织内容,但存在任意网页的风险
如果 Web 视图用于显示用户或组织内容,但存在导航到任意外部 URL 的风险,则可以将其他 API 与 TreatAllWebViewsAsUnmanaged 和 setWebViewPolicy:forWebViewer:结合使用。 示例包括具有指向搜索引擎的直接或间接链接的“建议功能”或“反馈”网页。
IntuneMAMWebViewPolicyDelegate可以使用 实现并设置为 Web 视图IntuneMAMPolicyManagersetWebViewPolicyDelegate:forWebViewer:。 有 IntuneMAMWebViewPolicyDelegate 一个必需的方法, isExternalURL:。
setWebViewPolicyDelegate:forWebViewer:方法必须直接在 WKWebView 或 SFSafariViewController 上调用。
每次 Web 视图导航到新页面时, isExternalURL: 都会调用委托方法。 应用程序应确定传递给委托方法的 URL 是否表示可以粘贴用户或组织数据的内部网站,还是表示可能泄露组织数据的外部网站。
NO返回将告知 SDK 正在加载的网站是可以共享用户或组织数据的组织位置。 如果当前策略设置需要,则 YES 返回将导致 SDK 在托管浏览器中打开 URL,而不是 WKWebView 或 SFSafariViewController。 这将确保应用内任何用户或组织数据都不会泄露到外部网站。
Web 视图 API 示例
应用使用五个 Web 视图构建, (A、B、C、D 和 E) 。 Web 视图 A、B 和 C 不显示用户或组织数据。 Web 视图 D 显示可供公司所有用户使用的组织页面。 Web 视图 E 呈现可能包含链接的用户文档。
由于大多数 Web 视图都是非托管的 (A、B 和 C) ,因此可以设置为 TreatAllWebViewsAsUnmanaged 减少需要调用 setWebViewPolicy:forWebViewer:的次数。
由于 Web 视图 D 和 E 显示用户内容,并且所有 Web 视图现在默认处于非托管状态,因此我们需要使用 IntuneMAMWebViewPolicyCurrentIdentity标记它们setWebViewPolicy:forWebViewer:。
由于 Web 视图 E 包含用户可能单击的链接并可用于导航到任意 URL,因此我们还需要实现 IntuneMAMWebViewPolicyDelegate 并使用 将其设置为 Web 视图 E setWebViewPolicyDelegate:forWebViewer:。 在isExternalURL:实现中,我们可以检查传入 URL,并查看它们是否与文档的 URL 相同。 如果不匹配,则我们知道它是一个外部 URL,可以返回 YES。 如果它们确实匹配,则我们知道它是内部 URL,并且可以返回 NO。
实现和调用这些 API 意味着托管用户或组织内容不会泄漏到 Web 视图 A、B 和 C。这也意味着托管内容无法泄露到用户可以通过单击文档内的链接在 E 中导航到的任何外部 URL。 还可以通过防止 Web 视图 D 和 E 中的数据泄露到应用外部来保护托管内容。