我正在使用 google API 进行定位(在 Android、iOS 应用程序中)。密钥可以硬编码吗?还是应该受到保护?如果它是敏感的,为什么它是敏感的?攻击者如何利用它?
Google API Key 是需要保护的敏感信息吗?
适用于 iOS 的 Google Maps SDK 将应用程序的 API 密钥发送给 Google,这样应用程序的任何最终用户都可以使用 HTTPS 代理找到应用程序的 API 密钥。如果你碰巧在 Mac 上开发,你可以很容易地使用Charles代理自己尝试一下。
将 Charles 配置为 clients4.google.com 的代理。在 Mac 上,您需要确保您使用的是具有完整 SSL 代理支持的“替代版本”,可从此页面下载。
在您的 iOS 设备上访问此链接,下载并安装适用于 iOS 设备的 Charles SSL 证书。
将您的 iOS 设备配置为使用 HTTP 代理(这在您的 WiFi 网络的高级选项中可用,可通过 WiFi 网络名称旁边的小“i”按钮访问)。将代理服务器设置为运行 Charles 应用程序的 Mac 的 IP 地址,并将端口设置为 8888。
运行使用 Google Maps SDK for iOS 的(或任何)iOS 应用程序。
在 Charles 中,您会看到 POST 请求发送到 clients4.google.com,其中 API 密钥作为请求正文的一部分可见。
所以,回答你的问题:
就安全性而言,如果您对密钥进行硬编码,这几乎无关紧要。任何最终用户都可以获取您的应用程序的地图 API 密钥,而无需深入研究应用程序本身。就方便而言,您最好从自己的服务器获取地图 API 密钥,这样如果/当您需要更新地图 API 密钥时,您不需要发布新版本的客户端应用程序。
地图 API 密钥不敏感,因为 Google 不会将其视为敏感信息。事实上,即使谷歌通过向他们的 API 发送(比如说)一个哈希而不是密钥本身来混淆密钥,一个确定的最终用户仍然可以通过检查你传递给的参数来获取你的 API 密钥。
+[GMSServices provideAPIKey:]
. 所以这是值得怀疑会有任何一点努力对待API密钥的敏感信息。攻击者可以通过向 Google Maps API 发出看似来自您的应用程序的请求来利用您的 API 密钥的公开。如果您为 Google Maps API 启用了计费功能,一群恶意用户可能会向 API 发送垃圾邮件以耗尽您应用的“礼貌”带宽,或者增加您的带宽费用。如果您(或 Google)密切关注您的带宽使用情况,您可以通过在您的应用(明显)使用地图 API 达到峰值时撤销和替换地图 API 密钥来部分防御此类攻击。
密钥可以硬编码吗?
你能详细说明一下吗?如果您的意思是将密钥硬编码到 URL 中,那么创建新密钥将意味着在代码级别对其进行更改。可以避免在代码级别更改此设置。
是否应该受到保护?
在大多数情况下,作为请求查询的一部分的密钥是公开的。(如果您确实使用 POST,仍然有获取此信息的方法)。但是,只要使用您的密钥的请求不是来自您的域(HTTP 引用),Google 就会返回一个错误。
攻击者如何利用这一点?
作为一个简单的用例,假设未正确设置每个用户的限制,则可以使用可访问的 API 密钥发起拒绝服务攻击。