为什么要隐藏 API 密钥?

信息安全 安卓 api 钥匙
2021-08-22 17:18:01

我需要将我的 android 应用程序与 Dropbox 集成,基本上我想要的只是让用户从他的 Dropbox 中选择一个文件并将其提供给我的应用程序。为此,我使用了 dropboxChooserSDK,它需要一个 API 密钥才能访问 dropbox。

我的第一直觉是寻找如何隐藏钥匙。深入研究它,我注意到没有解决问题的灵丹妙药(我应该有同样的期望)。

另一方面,考虑到密钥的目的,如他们的参考文档中所述,将我的保管箱 api 密钥暴露给世界似乎并没有太大的危害:

如果您在 Dropbox 之上构建开发者工具,您的开发者将需要他们自己的 Dropbox 应用密钥

虽然我们鼓励开发人员使用我们的官方 SDK 和库,但我们知道构建框架和 API 有很多不同的方法。无论应用如何使用 Dropbox 平台,我们都需要知道该应用是什么,这样我们才能让用户知道哪些应用正在访问他们的数据。因此,如果您提供包装 Dropbox 平台的软件或服务供其他开发人员使用,这些开发人员仍必须注册自己的 Dropbox 应用密钥。

但这让我想到了这个问题,我应该付出多少努力来隐藏我的 API 密钥?我的直觉告诉我使用信封计算来单独估计成本/收益权衡,但我也在这里读到关于这些问题的持续讨论(虽然我找不到)。

关于保护 API 密钥的一般理解是什么?

1个回答

我对 Dropbox 一无所知,但我对其他存储提供商(如 Google Drive、Amazon S3 等)的 API 密钥的理解是,它们允许用户通过他们的应用程序或第三方应用程序登录,并且他们想要能够跟踪哪个是哪个。问题中的引用听起来像是关于隐私:让最终用户知道哪些应用正在访问他们的数据,并能够逐个应用撤销权限。

还经常有一个计费角度:例如,Google Drive 通过他们自己的应用程序直接向最终用户提供免费服务,但向希望在另一个产品中搭载他们的基础设施的开发人员收取一些美元/gb 的费用。该应用程序开发人员是通过订阅向用户收取费用,还是将其作为业务成本吞下,这取决于他们。

这就是 API 密钥的用武之地:没有 API 密钥,对 Dropbox 服务器的传入请求只是一个请求;您知道是哪个最终用户,因为他们已经登录,但是您无法判断他们是在使用您的应用程序还是某个 3rd 方应用程序,如果是,那么向谁收取带宽费用。通过在您的应用程序中嵌入 API 密钥,您将应用程序发出的每个请求链接回您的开发者的结算帐户。

由于 Android.apk文件很容易进行逆向工程,因此可以想象,攻击者可以提取您的 API 密钥,在他们的应用程序中使用它,然后您就会收到账单。

保护密钥的努力值得冒险吗?随你(由你决定。如果您经常监控您的使用情况或设置了某种使用上限/警报,并且确信如果开始出现可疑情况,您可以快速撤销密钥,那么您可能没问题。


更新:正如@XiongChiamiov 在评论中指出的那样,如果您确实需要撤销您的密钥,您还应该考虑服务中断。假设您开始看到异常高的账单或达到预设的使用上限。你的回答可能是这样的:

  • 争先恐后地在您的应用中实施更好的 API 密钥保护
  • 使用新的 API 密钥向 Play 商店发布安全更新
  • 撤销旧的。

在用户通过 Google Play 更新他们的应用程序之前,您的应用程序的 Dropbox 功能将失效。这肯定会在您的用户中引起一些混乱。在这一点上这是否是一个足够大的风险取决于你。