android - 如何保护 Google API key

标签 android google-maps google-places

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

  • 使用 apktool 对 APK 进行逆向工程,
  • 打开 list 并捕获 map 键,
  • 创建了应用程序的虚假版本,其包结构与原始应用程序相同,其中包含带有 Google map fragment 的 Activity,
  • 将 map key 放入虚假 list 中,
  • 运行应用程序,显示 map

然后我:

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

最终,我毫不费力就获得了两个 key ,然后可以在应用程序的假版本中使用它们。

我确信我一定错过了一些东西。看起来 map 的唯一选择是将 key 存储在 list 中。是什么阻止某人做我所做的事情?肯定不能只是冷漠。我意识到,如果有人尝试使用被劫持的 API key 发布他们的应用程序,他们可能会被捕获。但是,有人可以创建一个应用程序并让人们侧面加载它。如果每次有人弄乱公司都必须更换被劫持的 key ,这对客户来说将是一个巨大的干扰。

最佳答案

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

我相信这些限制可以防止来自您未包含的其他域的请求无法呈现。

API Key best practices

关于android - 如何保护 Google API key ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56482557/

相关文章:

java - ANDROID_ID 有问题

Android 为多个 ImageView 触发 onTouch 事件

javascript - 将值推送到 javascript 数组返回大量错误

angular - 从外部 AGM 谷歌地图引用标记

java - 从 Android 版谷歌地图 api 获取交通数据

google-maps - 谷歌在没有 map 的情况下放置图书馆

java - 无法从静态上下文引用非静态方法 "getActivity"

android - 我们可以在陀螺仪给出的两点之间在android Canvas 上画线吗?

google-maps - 如何为Google Places API启用CORS