1

我刚刚开始学习编码。提供示例代码会很棒。

我使用 Firebase 开发了一个简单的 android 应用程序(本机 Java)。我有几个 API 密钥硬编码到我的应用程序的资源中。我读到最好将这些密钥存储在服务器上。我目前没有自己的域或服务器,但我有兴趣使用 Firebase 托管来存储这些 API 密钥。

我希望能得到一些帮助,为通过 Firebase 托管存储和检索这些 API 密钥奠定基础。如果它们简单且安全,我愿意接受其他建议。

谢谢!

4

2 回答 2

4

您的(移动或网络)客户端不应包含您的 Firebase 的 Secret。在某些时候,有人会对您的代码进行逆向工程,提取秘密,并通过这些人能够读取/写入您的 Firebase 数据库中的所有数据。在那个阶段你唯一能做的就是撤销 Secret,这将使所有客户端都失败。

Firebase 托管只允许您存储静态资源。因此,虽然您可以将 API 密钥存储在 Firebase 的托管服务器上,但它对安全性没有多大帮助。它仍然可供所有人阅读。

相反,您应该做的是在您的客户端中使用常规 Firebase 身份验证。Firebase 的 Android 用户身份验证指南对此进行了介绍。一个很好的例子可以在Firebase Login Demo for Android中找到。

于 2015-05-20T20:50:07.063 回答
-1

您可以加密您的 API 密钥和其他敏感数据。是一篇很棒的文章。最敏感的事情是将用于生成对称密钥的密码。重要的是(是的,同样的问题)不要在代码中硬编码这个密码,而是在运行时计算它。其计算的好处之一是 APK 的证书数据(在运行时为 Android 检索 apk 签名)。这可能会使逆向工程师的工作更加困难。但动态分析将帮助他/她获得密钥。

服务器端计算技术在这里也非常有用,尤其是结合前面的建议。

因此,密钥的一部分是在运行时生成的,另一部分是在用户认证成功后从服务器接收的。只是一个例子。

但最简单的方法是使用支持字符串/dex 字节码加密的商业混淆器,如DexProtector

注意我隶属于 Licel(DexProtector 的开发者)

于 2015-05-26T17:13:19.890 回答