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

How to Fix vulnerability at Manifest.xml file in Android for an exposed component

我需要将我的应用程序的一个模块公开给多个应用程序。因为,我没有指定 activity.

的任何权限或公开属性
<activity
            android:name=".MainActivity"
            android:label="@string/app_name"
            android:theme="@style/Theme.Transparent">
</activity>

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

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

Implement permissions on this exported component.

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

  1. 如果我实施引用权限,漏洞已移除,但我无法 运行 应用程序(我的意思是无法从其他应用程序执行任何操作)。

在我的应用程序中,我定义了权限

<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,如下所示。

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

但是,我无法通过调用 intent 从其他应用执行任何操作。但是,漏洞已经修复。

  1. 如果我将以下字段添加到 activity,它仍然列在漏洞 android:exported= "true"

  2. 如果它 android:exported=“false”,漏洞已移除,但应用程序完全无法运行

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

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

因此,如果 Activity 上有 "exported=false",则其他应用程序甚至 Android 系统本身都无法启动它.只有您可以从您自己的应用程序中做到这一点。

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

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

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

false‍ :广播接收器可以接收同一应用程序发送的事件

在我的主要 activity 中散列 intent-filter 操作 android.intent.action.MAIN 和类别 android.intent.category.LAUNCHER。

它旨在从其他应用程序启动而无需任何特殊权限。

因此,它不需要许可。

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

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