0

我在 google play 上有一个 android 应用程序,每天有大约 5k 用户。
我遇到了一个与 firebase auth 相关的奇怪错误,这并不常见,因此请在下结论之前仔细阅读:

我使用 Android_ID 作为我的应用用户的用户标识符Settings.Secure.getString(getContentResolver(), Settings.Secure.ANDROID_ID)

我知道这不是最好的主意,但它符合我的要求,因为它是独一无二的,每个手机都有一个,而且不可能改变(我想)。所以我用它在firebase中对我的用户进行身份验证,这样我就可以编写firebase规则来阻止用户根据他们查看其他用户的数据ANDROID_ID

但是有些用户在尝试读取自己的数据时被拒绝访问...

这看起来非常奇怪,第一个想法是我的代码中有一个错误,但是在调试了很多之后我找不到任何错误,所以我开始记录请求

我的日志显示了这样的内容

D/CrashlyticsCore check firebase access denied: device_id: e4c511c3-8ed7-3430-b3b0-e16d56acd2ad auth: da190696-e4bc-32f9-b229-eb24631a39fc

此消息表示用户已通过身份验证:da190696...但知道其 id 值为:e4c511c3...

我还注意到拒绝访问通常发生在应用程序最小化之后

所以问题是:对此有什么解释吗?是否可以在无根设备上更改 device_id?是否有可能以某种方式被android随机化?

4

2 回答 2

1

具体回答can user change the ANDROID_ID on an unrooted device?问题:

在运行 Android API 级别低于 8.0 的设备上,ANDROID_ID每个用户只有一个。可以使用以下方法进行更改:

# assuming we want to change user 0's ANDROID_ID
$ adb shell settings get --user 0 secure android_id
77aac9d1f119cb8f  
$ adb shell settings put --user 0 secure android_id aaaaaaaabbbbbbbb
$ adb shell settings get --user 0 secure android_id
aaaaaaaabbbbbbbb  

我们可以使用相同的技术来更改ANDROID_IDAndroid 8.0(及更高版本)设备上的内容,但是只有系统进程才能看到它。

于 2019-10-09T16:08:58.750 回答
1

你不应该使用Settings.Secure.ANDROID_ID这个。 阅读此内容以获取更多信息。 该值可以在各种情况下发生变化。

您还说过“我可以编写 Firebase 规则,阻止用户根据他们的 ANDROID_ID 查看其他用户的数据”。这不可能是安全的,因为客户没有义务向 Firebase 提供预期价值。有人可能会破坏您的应用程序或设备以发送他们想要的任何价值。

如果您需要安全地识别用户,请为此使用 Firebase 身份验证 UID。它保证是唯一的,并且对于该用户永远不会改变。它也可以在用户的​​设备上使用。

于 2019-05-13T03:35:24.793 回答