防止部分 Tapjacking - Android

Prevent partial Tapjacking - Android

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

filterTouchesWhenObscured = "true"

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

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

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

谢谢

对于那些有同样问题的人,最后我简单地检查了标志FLAG_WINDOW_IS_PARTIALLY_OBSCURED。为此,我扩展了 RelativeLayout class(您可以使用任何视图 class)并覆盖了方法 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 中,因此您必须在您的应用中包含该版本才能使用它。