OS X的accessibilityElementsHidden?如何保护我的应用程序的UI内部不被窃取?

时间:2017-04-19 06:17:48

标签: ios objective-c swift macos cocoa

我需要保护我的WebView的URL(使其不可用于Accessibility Inspector) 不要写信告诉我所有交通都可能被嗅到等等。我是一名逆向工程师,我知道这一切,我知道我想要什么。
我需要保护我的WebView的URL,指向。

WebView的URL不存储在WebView中,而是嵌套在其子节点的第一个子节点中,具有WebAccessibilityObjectWrapper类和“HTML内容”类型。
不幸的是,WebAccessibilityObjectWrapper类是Apple的“封闭”类,我们无法扩展它。

iOS(5.0+以上)有很棒的功能accessibilityElementsHidden,它解决了我的问题 但OS X没有。

我的解决方案:

  1. 为WebView覆盖NSAccessibilityChildrenAttribute,并为其值传递空数组。它确实可以防止在Inspector中穿过“儿童”财产。但不幸的是,不是来自Inspector的“点”功能。
  2. 以编程方式在“辅助功能”子项中查找“HTML内容”并使用它。不幸的是,我们需要在每次加载URL之后执行此操作,并且这里没有特殊事件,它太脏了。
  3. 如何更优雅地解决它?

1 个答案:

答案 0 :(得分:0)

iOS和macOS中的辅助功能协议略有不同。在iOS中,使VO技术透明的“视图”比在macOS中更简单。

您可以使用的属性是:

  • 可访问性元素:您设置为false
  • 可访问性角色:您需要设置为none;
  • 辅助功能角色描述:您可以设置为“”;

问题是,当视图被禁用为可访问性元素时,其所有子视图都变为可见。其中的一个示例是NSButton。只需禁用“外部”按钮对象,即:

let b = NSButton(...)
// setup your b 
b.setAccessibilityElement(false)

不能解决问题。 VO仍然可以看到按钮单元。

为VO隐藏UI元素并不是一件容易的事,但这很棘手。您需要玩一会儿才能理解要隐藏的特定对象的本质。