我的iOS应用有一个锁定屏幕,启用后会覆盖整个UIScreen
。但是,在UIScreen
范围之外,我的窗格中包含锁定屏幕未覆盖的敏感信息。 (当屏幕解锁时,可以刷入和滑出那些窗格。)
在UIScreen
范围之外获取信息的安全性如何?攻击者可以使用某种外部显示器,调试器或其他一些机制来“揭示”UIScreen
屏幕之外的内容吗?
[锁定屏幕是WKWebView
,默认情况下具有“放大镜”功能。我发现,当在UIScreen
的边缘触发时,放大镜会显示UIScreen
边缘后面的几个像素。我已经使用this answer禁用了放大镜。]
答案 0 :(得分:9)
[[[UIApplication sharedApplication] keyWindow] recursiveDescription]
来转储视图层次结构。还有Reveal和Spark Inspector等工具提供类似于Xcode视图调试器的界面,以查看应用UIWindow
中当前的任何视图。
正如zambrey建议的那样,最好根据需要初始化具有敏感信息的任何视图,并在用户不再需要时删除它们,而不是将它们保持在视图之外,但仍然在窗口层次结构中。这样做的好处不仅仅在于安全性,而且内存中的视图更少,这将提高应用程序的性能并减少内存占用。
如果您担心安全性,可能需要在运行时检查越狱设备并限制这些设备的某些功能。
答案 1 :(得分:5)
从技术上讲,内存中的任何内容都可以在越狱设备上公开。将敏感视图隐藏在当前显示的内容之外并不是一种安全措施。一旦设备被越狱,这些视图的视图和内容将被暴露。即使您将密码文本字段设置为“secureTextEntry”,即使您将其隐藏,只要未释放文本字段,就可以使用附加到应用程序的调试程序读取内容。即使取消分配文本字段,也可以转储内存,如果该内存尚未被覆盖,则可能会找到该视图的内容。
现在,如果您不担心Jailbroken场景,并且您只想找到其他选项,其中有非越狱设备的人可以探索视图,您应该检查Accessibility features included in iOS。如果未正确禁用该视图中的辅助功能,VoiceOver将能够读出隐藏的大声文本。从辅助功能工具中删除视图有时很棘手,因为父级的更改可能会影响所有子视图(请阅读UIAccessibility documentation)
在父视图中将accessibilityElementsHidden
设置为YES
或在视图中将isAccessibilityElement
设置为NO
应该有效。