如何修复 Android 中 Manifest.xml 文件中暴露组件的漏洞

Posted

技术标签:

【中文标题】如何修复 Android 中 Manifest.xml 文件中暴露组件的漏洞【英文标题】:How to Fix vulnerability at Manifest.xml file in Android for an exposed component 【发布时间】:2021-10-10 06:17:42 【问题描述】:

我需要将我的应用程序的一个模块公开给多个应用程序。因为,我没有指定活动的任何权限或公开属性。

<activity
            android:name=".MainActivity"
            android:label="@string/app_name"
            android:theme="@style/Theme.Transparent">
</activity>

有了这个,我可以启动应用程序,我也可以通过调用意图从其他应用程序执行活动。

但是,当我与 SonarQube 集成时,它会显示漏洞并说明以下问题。

对此导出的组件实施权限。

为了解决这个问题,我尝试了以下方法。

    如果我实现了引用权限,则漏洞被删除,但我无法运行应用程序(我的意思是不能对其他应用程序的任何操作进行操作)。

在我的应用中,我已经定义了权限

<permission android:name="com.myApp.NORMAL_PERMISSION"
    android:description="@string/perm_desc_NORMAL_PERMISSION"
    android:label="@string/perm_label_NORMAL_PERMISSION"
    android:protectionLevel="normal" />

我将此权限用于我的活动,如下所示。

 <activity
        android:name=".MainActivity"
        android:label="@string/app_name"
        android:permission="com.myApp.NORMAL_PERMISSION"
        android:theme="@style/Theme.Transparent">

但是,我无法通过调用意图从其他应用程序执行任何操作。但是,漏洞已得到修复。

    如果我将以下字段添加到活动中,它仍然在漏洞 android:exported="true" 下列出

    如果它的 android:exported="false",漏洞被移除,但应用程序完全无法运行

让我知道修复此漏洞的任何其他方法。

【问题讨论】:

【参考方案1】:

“exported”属性描述了是否允许其他人使用它。

因此,如果您在某个 Activity 上设置了 "exported=false",则任何其他应用,甚至 Android 系统本身都无法启动它。只有您可以在您自己的应用程序中执行此操作。

因此,在标记为 LAUNCHER Activity 的 Activity 上设置 "exported=false" 基本上会告诉系统它永远无法启动您的应用程序。

链接: https://developer.android.com/guide/topics/manifest/receiver-element.html

true :广播接收器可以接收相同或其他应用程序发送的事件

false‍ :广播接收者可以接收同一个应用发送的事件

【讨论】:

【参考方案2】:

在我的主要活动中,其中哈希意图过滤操作 android.intent.action.MAIN 和类别 android.intent.category.LAUNCHER。

它的目的是在没有任何特殊权限的情况下从其他应用程序启动。

所以,它不需要许可。

<activity
    . . .
    android:exported="true"
    android:permission="" >

也就是说,将权限定义为空字符串可以解决问题并明确表明您的意图,即启动此活动不需要权限。

【讨论】:

以上是关于如何修复 Android 中 Manifest.xml 文件中暴露组件的漏洞的主要内容,如果未能解决你的问题,请参考以下文章

如何修复 Android 中 Manifest.xml 文件中暴露组件的漏洞

如何在颤振中修复“Android许可证状态未知”

如何在 Android 10(适用于 Android 9)中修复无需人工交互的直接拨出电话?

如何修复 Android 应用的应用购买问题?

如何在Android中修复相机预览(surfaceview)的正确纵横比?

如何在android java中修复sqliteException