如何解决有关导出的 Firebase 消息服务实现的 android 棉绒投诉?



按照谷歌开发者关于在我的应用中实现Firebase的说明,我注意到android lint抱怨。

这个想法是,我们必须实现两个继承自Firebase服务的服务:

public class MyFirebaseInstanceIDService extends FirebaseInstanceIdService { ... }
public class MyFirebaseMessagingService extends FirebaseMessagingService { ... }

,然后在清单中注册这些服务。但是,它不是很完美。特别是,这两个推荐的 AndroidManifest.xml 服务条目不包含任何特殊权限:

<service android:name=".MyFirebaseMessagingService">
<intent-filter>
<action android:name="com.google.firebase.MESSAGING_EVENT"/>
</intent-filter>
</service>
<service android:name=".MyFirebaseInstanceIDService">
<intent-filter>
<action android:name="com.google.firebase.INSTANCE_ID_EVENT"/>
</intent-filter>
</service>

所以棉绒说:

导出的服务(设置 exported=true 或包含意图过滤器且未指定 exported=false 的服务)应定义实体必须具有的权限才能启动服务或绑定到服务。没有此功能,任何应用程序都可以使用此服务。

我是否应该将此属性添加到每个服务标签并完成它

tools:ignore="ExportedService"

还是在这种情况下有更好的方法?我的意思是,像这样公开这些特定的Firebase派生服务是否安全?

你问:...像这样公开这些特定的 Firebase 派生服务是否安全?如果您信任这些服务的清单文件中的注释。

在 Android Studio 中,打开应用的 AndroidManifest.xml 文件。 在窗口底部,选择"合并清单"选项卡。 滚动以查找FirebaseMessagingService的条目。 双击包含服务名称的行。 该服务的清单文件应打开,您将看到以下内容:

<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.google.firebase.messaging">
<uses-sdk android:minSdkVersion="14"/>
<application>
<!-- FirebaseMessagingService performs security checks at runtime,
no need for explicit permissions despite exported="true" -->
<service android:name="com.google.firebase.messaging.FirebaseMessagingService" android:exported="true">
<intent-filter android:priority="-500">
<action android:name="com.google.firebase.MESSAGING_EVENT"/>
</intent-filter>
</service>
</application>
</manifest>

请注意注释:FirebaseMessagingService 在运行时执行安全检查,尽管 exported="true" 不需要显式权限

您可以对FirebaseInstanceIdService执行相同的操作并查看相同的注释。

如果您信任评论(我信任),则可以安全地忽略 lint 警告或禁用检查。

<service android:name=".java.MyFirebaseMessagingService"
android:exported="false">
<intent-filter>
<action android:name="com.google.firebase.MESSAGING_EVENT" />
</intent-filter>
</service>

根据官方代码示例,设置 exported=false 是安全的

相关内容

  • 没有找到相关文章

最新更新