5

我的 iOS 应用程序有一个锁定屏幕,启用后会覆盖整个UIScreen. 但是,在UIScreen界限之外,我有一些窗格,其中包含锁定屏幕未覆盖的敏感信息。(屏幕解锁时,这些窗格可以滑入和滑出。)

拥有边界之外的信息有多安全UIScreen?攻击者能否使用某种外部显示器、调试器或其他机制来“揭示”UIScreen屏幕之外的内容?

【锁屏是WKWebView默认有“放大镜”功能的。我发现,当在 边缘触发时UIScreen,放大镜会显示UIScreen边缘后面的几个像素。我已经用这个答案禁用了放大镜。]

4

2 回答 2

9

在屏幕外“隐藏”视图根本不安全。任何拥有越狱设备的人都可以在运行时使用 MobileSubstrate 连接到您的应用程序并调用[[[UIApplication sharedApplication] keyWindow] recursiveDescription]转储视图层次结构。还有诸如RevealSpark Inspector之类的工具,它们提供了一个类似于 Xcode 的视图调试器的界面来查看当前在应用程序的UIWindow.

正如 zambrey 所建议的那样,最好根据需要使用敏感信息初始化任何视图,并在它们被关闭且用户不再需要时将其删除,而不是将它们保持在视图之外但仍在窗口层次结构中。这样做的好处不仅仅是安全,而且在内存中减少视图将提高您的应用程序的性能并减少其内存占用。

如果您担心安全性,您可能希望在运行时检查越狱设备并限制这些设备的某些功能。

于 2015-11-11T16:47:35.713 回答
5

从技术上讲,内存中的任何内容都可能暴露在越狱设备上。将敏感视图隐藏在当前显示的内容之外并不是一种安全措施。一旦设备越狱,视图和这些视图的内容将被暴露。即使您将密码文本字段设置为“secureTextEntry”并且即使您将其隐藏,只要该文本字段未解除分配,就可以使用附加到应用程序的调试器读取内容。即使文本字段被释放,内存也可能被转储,如果该内存尚未被覆盖,您可能会找到该视图的内容。

现在,如果您不担心越狱场景,并且只想找到其他选项,让未越狱设备的人可以浏览视图,您可能应该检查iOS 中包含的辅助功能。如果未正确禁用该视图中的可访问性,VoiceOver 将能够朗读隐藏的文本。从辅助工具中删除视图有时很棘手,因为父视图的更改可能会影响所有子视图(阅读UIAccessibility 文档

在父视图或视图中设置为accessibilityElementsHidden应该可以工作。YESisAccessibilityElementNO

于 2015-11-12T00:10:24.543 回答