【问题标题】:accessibilityElementsHidden for OS X? How to protect my app's UI internals from stealing eyes?OS X 的accessibilityElementsHidden?如何保护我的应用程序的 UI 内部不被窃取?
【发布时间】:2017-04-19 06:17:48
【问题描述】:

我需要保护我的 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 加载后都这样做,而且没有特殊事件,这太脏了。

如何更优雅地解决?

【问题讨论】:

  • 一些想法要测试,不确定 MacOS 中有什么可用的:.isAccesibilityElement 设置为 NO/false,.accesibilityTraits 设置为无,父视图的 accessibilityElements 设置为仅包含所需的视图(最后一种方法可能真的很难,因为它是一个网络视图)
  • 你为什么讨厌盲人? (说真的。这就是可访问性的对象。禁用它会使他们无法使用您的应用。)
  • @Kamil.S 感谢 accessesibilityTraits 和部分accessibilityElements,将进行测试。
  • @duskwuff 1) 反正盲人的生活难以忍受,我的应用程序是小改动,太小了。如果你认为苹果真的帮助盲人,那是无稽之谈。 2) 我根本不想禁用它,我只想隐藏 WebView 的 URL。如果这是不可能的,我需要完全禁用它——这不是我的错,而是苹果的错。 3)如果我允许窃贼仍然是我的内容,我将根本无法制作应用程序,因为我至少需要食物。 :)
  • @Rou1997 我相信您知道您的应用仍然容易被网络数据包嗅探,并且可能仍然可以通过这种方式找到 url。

标签: ios objective-c swift macos cocoa


【解决方案1】:

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

你可以玩的属性是:

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

问题在于,当视图作为可访问性元素被禁用时,它的所有子视图都变得可见。这方面的一个例子是NSButton。只需禁用“外部”按钮对象,即:

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

不能解决问题。 VO 仍然可以看到纽扣电池。

为 VO 隐藏 UI 元素并非易事,但也很棘手。您需要花点时间了解要隐藏的特定对象的本质。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-09-08
    • 2020-08-08
    • 2011-09-05
    • 2010-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-29
    相关资源
    最近更新 更多