Google API Key 是需要保护的敏感信息吗?

信息安全 密钥管理 安卓 IOS
2021-09-02 23:09:58

我正在使用 google API 进行定位(在 Android、iOS 应用程序中)。密钥可以硬编码吗?还是应该受到保护?如果它是敏感的,为什么它是敏感的?攻击者如何利用它?

2个回答

适用于 iOS 的 Google Maps SDK 将应用程序的 API 密钥发送给 Google,这样应用程序的任何最终用户都可以使用 HTTPS 代理找到应用程序的 API 密钥。如果你碰巧在 Mac 上开发,你可以很容易地使用Charles代理自己尝试一下。

  1. 将 Charles 配置为 clients4.google.com 的代理。在 Mac 上,您需要确保您使用的是具有完整 SSL 代理支持的“替代版本”,可从此页面下载。

  2. 在您的 iOS 设备上访问此链接,下载并安装适用于 iOS 设备的 Charles SSL 证书

  3. 将您的 iOS 设备配置为使用 HTTP 代理(这在您的 WiFi 网络的高级选项中可用,可通过 WiFi 网络名称旁边的小“i”按钮访问)。将代理服务器设置为运行 Charles 应用程序的 Mac 的 IP 地址,并将端口设置为 8888。

  4. 运行使用 Google Maps SDK for iOS 的(或任何)iOS 应用程序。

在 Charles 中,您会看到 POST 请求发送到 clients4.google.com,其中 API 密钥作为请求正文的一部分可见。

所以,回答你的问题:

  1. 就安全性而言,如果您对密钥进行硬编码,这几乎无关紧要。任何最终用户都可以获取您的应用程序的地图 API 密钥,而无需深入研究应用程序本身。就方便而言,您最好从自己的服务器获取地图 API 密钥,这样如果/当您需要更新地图 API 密钥时,您不需要发布新版本的客户端应用程序。

  2. 地图 API 密钥不敏感,因为 Google 不会将其视为敏感信息。事实上,即使谷歌通过向他们的 API 发送(比如说)一个哈希而不是密钥本身来混淆密钥,一个确定的最终用户仍然可以通过检查你传递给的参数来获取你的 API 密钥。+[GMSServices provideAPIKey:]. 所以这是值得怀疑会有任何一点努力对待API密钥的敏感信息。

  3. 攻击者可以通过向 Google Maps API 发出看似来自您的应用程序的请求来利用您的 API 密钥的公开。如果您为 Google Maps API 启用了计费功能,一群恶意用户可能会向 API 发送垃圾邮件以耗尽您应用的“礼貌”带宽,或者增加您的带宽费用。如果您(或 Google)密切关注您的带宽使用情况,您可以通过在您的应用(明显)使用地图 API 达到峰值时撤销和替换地图 API 密钥来部分防御此类攻击。

密钥可以硬编码吗?

你能详细说明一下吗?如果您的意思是将密钥硬编码到 URL 中,那么创建新密钥将意味着在代码级别对其进行更改。可以避免在代码级别更改此设置。

是否应该受到保护?

在大多数情况下,作为请求查询的一部分的密钥是公开的。(如果您确实使用 POST,仍然有获取此信息的方法)。但是,只要使用您的密钥的请求不是来自您的域(HTTP 引用),G​​oogle 就会返回一个错误。

攻击者如何利用这一点?

作为一个简单的用例,假设未正确设置每个用户的限制,则可以使用可访问的 API 密钥发起拒绝服务攻击。