【问题标题】:Hide API Key in Manifest and in source code android在 Manifest 和源代码 android 中隐藏 API 密钥
【发布时间】:2018-03-15 04:16:51
【问题描述】:

我有一个 Google MAPS API KEY,当您使用逆向工程反编译我的应用程序时,可以很容易地看到它。这一点都不好。另外,我在通过字符串访问的源代码中使用了 Weather API KEY。

我找到了这个网站https://medium.com/@cassioso/a-strategy-to-secure-your-api-keys-using-gradle-b9c107272860

想问你,这篇文章是推荐的还是你有更好的主意?

有人对这个问题有任何经验吗?

我正在使用 ProGuard,但 ProGuard 不会混淆 AndroidManifest(据我所知,这甚至是不可能的),它也不会混淆任何 String API KEY(我不知道为什么)

我对 DexGuard 没有任何经验。

您能否告诉我这个网站是否正常运行,或者您能否提供更多关于如何在清单和源代码中隐藏 api 密钥的提示。

【问题讨论】:

标签: android maps key proguard


【解决方案1】:

没有理由隐藏您的 API 密钥。它们直接从清单中解析。刚要评论,不回答,但是评论太长了哈哈。所以我想我会发布作为答案。

为什么要隐藏 API 密钥? GMaps 和 Fabric 和 Firebase 建议您直接放入 Manfiest。

您发布的网站只是将它放在 build.config 文件中。您也可以嵌套在环境变量中并使用 Gradle 将它们拉入,但这有什么意义。您仍在将它们拉入一个文件,该文件将与 APK 一起生成和打包。如果您能解释您的理由,我很乐意帮助您找到隐藏钥匙的方法。

如果确实有必要,您总是可以将其设为远程 API,以便第一次提取并放入数据库,如果确实需要安全,您可以使用 SQLCipher。存储后,您可以在运行时动态加载。不过,我不知道当 SDK 从清单中解析它时,它的效果如何。

创建 SDK 以从清单文件中解析密钥是很常见的,因此如果打算在运行时加载它,则 SDK 必须支持这一点,而不是依赖于从清单文件中解析它。

所以我的建议是将它作为普通的可见 API 密钥保留在清单中。该包对您的应用程序是唯一的,SDK 将使用该包和可能的应用程序密钥以及嵌套在 SDK 中的密钥,以确保所有调用都来自您的应用程序。所以回到我原来的问题。为什么需要隐藏 API 密钥?

【讨论】:

  • 感谢您的回答。老实说,我可以将 Google MAP API KEY 留在我的清单中。为什么?因为我使用 SHA-1 指纹通过 Google 保护了这个 KEY。因此,不可能为任何人使用谷歌地图 api 密钥。问题是天气 api 密钥。有人可以使用此 api 密钥,服务器 (OpenWeather) 可以发现大量活动并阻止我的 api 密钥。所以我的应用程序的用户无法使用天气功能。那是我的问题。
  • @Blnpwr 您不能隐藏纯文本字符串。获取该 API 密钥的最佳方法是让服务器在适当的身份验证后将其检索给您。查看 Facebook 的 Conceal API,它也可能有所帮助。
  • @GuilhE 好吧,连接到服务器还需要一个密钥,不能按照您的逻辑隐藏。逆向工程可以使您的 api 密钥可见已经很糟糕了,如果您使用服务器连接,那么您对该服务器的密码也是可见的。我认为这不是一个好主意。
  • 知道了,如果他们需要安全,他们不会要求它在清单中,如果你想以备将来使用,你可以通过 API 从 https 服务器简单地检索并在本地存储在 SQLite 中。另一种选择是使用加密对其进行加密,您可以使用您的应用程序独有的盐在您的代码中对其进行解密,并且只有您知道使用它。然后你可以在运行时解密字符串,没有其他人会知道更好
  • 通过适当的身份验证,我在某些登录系统(用户/密码)中考虑,但由于这是一个天气应用程序(或天气 API,它只是一个功能?)我想它是矫枉过正的。试试 Facebook Conceal ;) 手动加密会失败,因为你必须提供盐、密码等,而且这些也会被硬编码。 Facebook API 为您节省时间。 " Conceal 提供了简单的 Android API,用于对数据进行快速加密和身份验证。facebook.github.io/conceal"
猜你喜欢
  • 2017-03-12
  • 2011-11-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-25
  • 2021-04-30
相关资源
最近更新 更多