如何修复 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.
为了解决这个问题,我尝试了以下方法。
- 如果我实施引用权限,漏洞已移除,但我无法 运行 应用程序(我的意思是无法从其他应用程序执行任何操作)。
在我的应用程序中,我定义了权限
<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 从其他应用执行任何操作。但是,漏洞已经修复。
如果我将以下字段添加到 activity,它仍然列在漏洞 android:exported= "true"
下
如果它 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。
我需要将我的应用程序的一个模块公开给多个应用程序。因为,我没有指定 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.
为了解决这个问题,我尝试了以下方法。
- 如果我实施引用权限,漏洞已移除,但我无法 运行 应用程序(我的意思是无法从其他应用程序执行任何操作)。
在我的应用程序中,我定义了权限
<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 从其他应用执行任何操作。但是,漏洞已经修复。
如果我将以下字段添加到 activity,它仍然列在漏洞 android:exported= "true"
下如果它 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。