首页 > 解决方案 > 我是否应该担心从 iOS 应用程序中提取我的 API 密钥

问题描述

我需要从我的应用程序中向 Google Books API 发出请求,该应用程序在 URL 中包含 API 密钥。

我想在我的应用程序中将它创建为文件私有变量,尽管这是一个大问题,因为它会被上传到 Github。

然后我想到了环境变量,但我听说如果应用程序不是由 Xcode 运行,它们不包括在内。

我知道这样可以提取密钥,但我应该担心吗?无论如何,用户不能只使用 Wireshark 或类似的东西并查看 URL 中的密钥吗?

而且我可以限制密钥,因此它仅在从我的 Bundle ID 调用时才有效。

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

标签: iossecurityenvironment-variablesapi-keygoogle-books

解决方案


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

至于缓解措施,您是否可以限制 api 密钥范围,以便只能在 api 上执行必要的操作?可以设置限速吗?监控、报警?我不熟悉 Books api,但这些可能是缓解控制。

至于消除风险,您不应该将 api 密钥放在应用程序中。您可以设置自己的服务器,该服务器将保存 api 密钥,并将请求转发给 theBooks api,并使用 thr api 密钥进行扩充。请注意,尽管您仍然需要在服务器中进行某种身份验证和访问控制,否则攻击者可以将其用作预言机来执行实际 Books api 中的任何操作,就像他们拥有密钥一样,仅在此如果他们不需要它。这个角色也可以由某种 api 网关来完成,它还可以向 api 查询添加数据。

消除风险显然更昂贵。防御应该与风险成比例,所以你必须决定它是否值得。


推荐阅读