我是否应该担心我的 API 密钥会从 iOS 应用程序中提取出来

Should I worry about my API Keys being extracted from the iOS app

我需要从我的应用向 Google 书籍 API 提出请求,其中包括 URL 中的 API 键。

我考虑过在我的应用程序中将其创建为文件私有变量,但这是一个大问题,因为它随后会被上传到 Github。

然后我考虑了环境变量,但我听说如果应用不是 Xcode 的 运行,它们就不会包含在内。

我知道可以通过这种方式提取密钥,但我应该担心吗? 无论如何,用户不能只使用 Wireshark 或类似的东西并在 URL?

中看到密钥

而且我可以限制密钥,使其仅在从我的 Bundle ID 调用时有效。

您认为拨打电话的最佳选择是什么?我的意思是除此之外,该应用程序每周几乎没有 10 次下载,所以这不是什么大问题,对吧?

这是否是一个问题完全取决于您的用例和威胁模型。考虑您的 api 键 public 如果您以任何方式包含或发送它 in/from 您的应用程序,并考虑人们可以用它做什么。它们会对您造成何种程度的伤害?这会给你带来影响。他们会受到激励吗,例如,他们会以某种方式获得经济利益吗?这估计了这种情况发生的可能性。这一起,影响 x 可能性 = 风险,您可以接受(不采取任何措施)、减轻(减少影响或可能性)、消除(修复)或转移(例如购买某种保险)。

至于缓解措施,您能否限制 api 键范围,以便只能在 api 上使用它完成必要的事情?你能设置速率限制吗?监控、报警?我不熟悉书籍 api,但这些可能是缓解控制。

为了消除风险,你不应该把api密钥放在应用程序中。您可以设置自己的服务器,该服务器将保存 api 键,并且几乎会将请求转发到 Books api,并使用 api 键进行扩充。请注意,尽管您仍然需要在您的服务器中进行某种身份验证和访问控制,否则攻击者可以将其用作 oracle 来执行实际 Books api 中的任何操作,就像他们拥有密钥一样,只有在这种情况下他们才不需要它。这个角色也可以通过某种 api 网关来实现,它也可以将数据添加到 api 查询。

消除风险的成本显然更高。防御应该与风险成正比,所以你必须决定是否值得。