【问题标题】:Prevent partial Tapjacking - Android防止部分 Tapjacking - Android
【发布时间】:2019-08-19 11:36:43
【问题描述】:

我正在努力提高应用程序的安全性并防止 Tapjacking。为此,我们使用了:

filterTouchesWhenObscured = "true"

似乎我们已经设法保护应用程序免受视图被完全覆盖 (FLAG_WINDOW_IS_OBSCURED) 但尚未部分覆盖 (FLAG_WINDOW_IS_PARTIALLY_OBSCURED) 的情况。

我真的不知道如何处理最后一种情况,我已经阅读了 here 标志的含义,但我没有找到有关如何解决这种情况的文档。

有人遇到过这个问题或知道如何处理吗?

谢谢

【问题讨论】:

  • 自 Android 4.1 左右以来,操作系统已阻止窃听。窗口的应用程序代码不能同时看到触摸事件并将它们传递给底层窗口。你能重现窃听攻击吗?
  • @CommonsWare 我已经阅读过它,但也看到了这样的链接:xda-developers.com/… 谈论棉花糖中的 Tapjacking。无论如何,我没有亲自复制它,但一个团队使用我认为的应用程序 Visium TapJacking 复制了它。问题是只有当他们部分覆盖视图时才会发生这种情况,而且我不知道他们是否在该部分之外触摸并认为它仍然很危险(它仍然会是吗?)。感谢您的评论

标签: android security motionevent


【解决方案1】:

对于那些有同样问题的人,最后我只是检查了标志FLAG_WINDOW_IS_PARTIALLY_OBSCURED。为此,我扩展了 RelativeLayout 类(您可以使用任何视图类)并覆盖了方法 onFilterTouchEventForSecurity:

@Override
public boolean onFilterTouchEventForSecurity(MotionEvent event) {
    if (((event.getFlags() & MotionEvent.FLAG_WINDOW_IS_OBSCURED) == MotionEvent.FLAG_WINDOW_IS_OBSCURED)
            || (event.getFlags() & MotionEvent.FLAG_WINDOW_IS_PARTIALLY_OBSCURED) == MotionEvent.FLAG_WINDOW_IS_PARTIALLY_OBSCURED){
        return false;
    }

    return super.onFilterTouchEventForSecurity(event);
}

标志FLAG_WINDOW_IS_PARTIALLY_OBSCURED 将返回到true,即使在部分覆盖区域之外进行了触摸(只要有部分视图被覆盖),因此进行安全检查非常有用。

不好的是它包含在 Api 29 中,因此您必须在应用中包含该版本才能使用它。

【讨论】:

  • MotionEvent.FLAG_WINDOW_IS_PARTIALLY_OBSCURED 自 API 24 以来一直存在但隐藏 (@hide),因此这适用于 API 24+。
  • 不实用——因为您实际上必须扩展所有内容才能添加它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-22
  • 1970-01-01
  • 2015-05-11
  • 1970-01-01
  • 2016-11-21
  • 2013-05-04
相关资源
最近更新 更多