Jetpack Compose Tapjacking:过滤模糊 UI 上的触摸

问题描述 投票:0回答:2

虽然有大量关于 Android 传统 XML 视图中的窃听 的文档,以防止恶意应用程序与敏感信息交互,但似乎没有关于 Jetpack Compose 问题的文档。

是否有与

filterTouchesWhenObscured
等效的
@Composable
,这个问题是否在更基础的层面上得到解决,或者是否需要使用手势/触摸修饰符来实现自定义逻辑?

android android-layout security android-jetpack-compose android-jetpack
2个回答
1
投票

无法为特定的可组合项指定

filterTouchesWhenObscured
,并且根据 this 维护者评论,目前尚未计划:

在不久的将来,我们不太可能在 ComposeView 级别之外实现它。

但是你可以对用于绘制 Compose 树的

ComposableView
执行此操作。例如,如果您要将其应用到整个屏幕,而屏幕上有某个特定视图,您可以这样做:

val composeView = LocalView.current

DisposableEffect(Unit) {
    composeView.filterTouchesWhenObscured = true
    onDispose {
        composeView.filterTouchesWhenObscured = false
    }
}

或者,如果您想将其应用于特定的可组合项,例如仅应用于屏幕的一部分,您可以使用这样的包装器:

@Composable
fun ObscuredView(
    content: @Composable () -> Unit,
) {
    AndroidView(
        factory = {
            ComposeView(it).apply {
                filterTouchesWhenObscured = true
            }
        },
        update = {
            it.setContent(content)
        }
    )
}

用途:

ObscuredView {
    Text("this text is Obscured")
}

0
投票

我有一个 Activity Compose 应用程序,并创建了此辅助函数来解决此应用程序的安全问题。 在Activitie的

setContent{...}
中通过
onCreate
设置Compose内容后调用该函数。

/**
 *  Must and can only be called after the compose content was set via onCreate
 */
fun preventTapJackingSecurityIssue() {
    ((findViewById<View>(android.R.id.content) as ViewGroup).getChildAt(0) as? ViewGroup?)?.filterTouchesWhenObscured = true
}
© www.soinside.com 2019 - 2024. All rights reserved.