【问题标题】:Hiding API keys used in an open source application隐藏开源应用程序中使用的 API 密钥
【发布时间】:2013-01-09 12:21:10
【问题描述】:

我目前正在开发一个基于 3rd 方 Web API 的桌面应用程序,并且已经注册了他们的程序并获得了两个访问密钥作为回报。

但是,如果将这些键作为字符串粘贴到源代码中,那么任何人都可以拉回 repo 的内容并轻松找到它们。

到目前为止,我如何防止这种情况的最佳想法是将它们单独编译到一个类文件中,对其进行混淆,然后使用它,这样它们至少不会在源代码中以纯文本形式出现。但是有没有更好,更被接受或常用的方式我错过了?我并不追求完全和绝对的安全性,但至少想让在开源环境下尽可能难以提取密钥。

【问题讨论】:

  • 混淆类不会有太大区别,因为它只会破坏字段名称,而不是其内容,因此提取仍然很简单。
  • 您确定您可以允许“世界”使用您的凭据访问网络服务吗?每个用户不应该为自己注册吗?
  • @a_horse_with_no_name 这些是特定于应用程序的 API 密钥,而不是特定于用户的。通过在这种情况下进行混淆,我可能会手动对实际的字符串构造进行处理。当然,仍然相对容易提取,但至少有点模糊。
  • How to open-source an application that uses API keys 的可能重复项。不过,这个问题的范围更具体,所以可能不是。

标签: java open-source obfuscation api-key


【解决方案1】:

您可能希望将访问密钥作为一个单独的文件插入到源代码中,这样您就可以避免将其推送到公共存储库(或者在删除实际密钥的情况下推送,以便想要使用您的应用程序的人需要插入自己的密钥)。这样一来,一切都是开源的除了你的私钥本身。

TL;DR:真正避免发布密钥的唯一方法是不要让它们成为公共源代码库的一部分。其他任何东西都意味着它们很容易被其他人提取。

【讨论】:

  • 这很有意义,但我也在考虑当我发布软件时,它需要在某个地方一次又一次地包含密钥 - 它们可以很容易地反编译和发布。
  • 我们是在谈论发布源代码的混淆,还是在二进制发布中?对于源代码没有意义,所以这是浪费精力。对于二进制版本,您正在进入 DRM 领域。它仍然不是很有效,但这里还有更多的回旋余地。如果是后者,你能提供更多细节吗?什么语言和平台?你的目标用户是什么类型的?
  • 后者,是的 - 一个桌面 Java 应用程序,我想我的目标是您的“典型 IT 用户”。认为有 IT 素养,但不是程序员。
  • @berry120 看看this 作为一种可能的解决方案。它为您提供了一种在代码中混淆字符串文字的方法,还提到了一个免费的代码混淆工具,可与数据混淆一起使用。
猜你喜欢
  • 2019-12-25
  • 1970-01-01
  • 1970-01-01
  • 2023-02-05
  • 1970-01-01
  • 1970-01-01
  • 2022-07-06
  • 2019-12-11
  • 2016-07-24
相关资源
最近更新 更多