如何修复 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 10(适用于 Android 9)中修复无需人工交互的直接拨出电话?