【问题标题】:How to secure google API keys如何保护谷歌 API 密钥
【发布时间】:2019-06-06 17:37:00
【问题描述】:

我一直在对 Android 应用进行一些安全测试。我想要解决的一件事是 API 密钥安全性。特别是谷歌地方和地图键。有很多帖子讨论了这些选项,即将密钥编译为源代码,将它们放入资源文件中,将它们编译到共享库中等。在我的特定情况下,Maps 密钥在清单文件中,而 Places 密钥在共享库中。我创建了一个签名的 APK 来测试获取和使用其中一个密钥的难度。我做了以下事情:

  • 使用 apktool 对 APK 进行逆向工程,
  • 打开清单并抓住地图键,
  • 创建了一个虚假版本的应用程序,其包结构与原始版本相同,其中包含一个带有谷歌地图片段的活动,
  • 将 Maps 密钥放入虚假清单中,
  • 运行显示地图的应用程序

然后我:

  • 在伪造的应用程序中创建了一个新类,其包和名称与原始应用程序相同,代码从 /data/data/[包名] 加载共享库,
  • 将反向工程 APK 中的共享库复制到假应用的 /data/data/[package name] 文件夹中,
  • 运行假应用程序,然后打印出 Locations API 密钥

所以最后,不费吹灰之力,我就拥有了两个密钥,然后我可以将它们用于伪造的应用程序版本。

我确定我一定错过了什么。看起来 Maps 的唯一选择是将密钥存储在清单中。是什么阻止某人做我所做的事?当然不能只是冷漠。我意识到如果有人试图使用被劫持的 API 密钥发布他们的应用程序,他们可能会被抓住。但是,有人可以创建一个应用程序并让人们侧加载它。如果公司必须在每次有人弄乱被劫持的密钥时都更改它,这将对客户造成巨大的破坏。

【问题讨论】:

    标签: android google-maps google-places


    【解决方案1】:

    我认为您需要再次查看 Google API 密钥的文档。似乎有一些称为限制的东西应该能够帮助您确保您的密钥受到保护并且不会在其他应用程序上使用。

    我相信限制会阻止来自您未包含的其他域的请求无法呈现。

    API Key best practices

    【讨论】:

      【解决方案2】:

      有很多方法可以确保您的 API 密钥安全。下面的链接解释了如何保护您的密钥。根据您的用例,您可以遵循其中一个

      Using Gradle

      Using NDK

      Using Server Call

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-06-30
        • 2019-01-12
        • 2020-04-11
        • 2018-07-17
        • 2016-01-04
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多