【问题标题】:Best practices for securing API credentials as part of an iPhone app作为 iPhone 应用程序的一部分保护 API 凭据的最佳实践
【发布时间】:2010-11-08 21:01:31
【问题描述】:

我经常构建的应用程序具有“社交媒体服务”要求;例如

  1. 推特
  2. bit.ly
  3. 脸书

对于大多数这些服务,我需要某种 API 密钥。我正在尝试找出将这些 API 密钥包含在应用程序二进制文件中的最佳方法。所需的安全级别取决于恶意攻击者可能进行的攻击。

推特

  • 我有一个启用 xAuth 的密钥和密钥。两者都需要 iPhone 应用使用。

攻击的后果

  • 恶意用户可能会伪装成来自我的应用程序发布 Twitter 状态更新。没有 twitter 帐户可以劫持并开始发布状态更新。

bit.ly

  • 我有用户名、密码和 API 密钥。
  • 要登录网站并访问分析,需要用户名和密码。
  • 要通过 API 创建链接,我的 iPhone 应用程序只需要用户名和 API 密钥。密码不会以任何形式出现在应用中。

攻击的后果

  • 恶意用户可以在我的 bit.ly 帐户上创建链接。他们需要进行单独的攻击以暴力破解或以其他方式获取登录帐户的密码。

对于这两种服务,潜在的危害似乎都不是很大。但对于其他服务,情况可能会更糟。

我可以将 API 凭据定义为标头中的字符串或代码中的内联字符串,但随后有人在应用程序上使用 strings 来查看其中的内容很容易受到攻击。

然后我可以开始在代码中进行愚蠢的连接/异或运算以在内存中重新创建 API 密钥,而攻击者将不得不做更多的工作来恢复二进制文件中的任何密钥。我担心的是,我不是密码学家,会在那里创建一种令人尴尬的弱混淆形式。

人们有什么更好的建议?

【问题讨论】:

    标签: iphone objective-c security cryptography


    【解决方案1】:

    攻击者可以嗅探您的流量并从中提取秘密。所以任何混淆都很容易被规避。

    即使 SSL 也无济于事,因为您可以拦截接收未加密数据的网络 API。

    解决此问题的安全方法是创建您自己的服务器,保留服务器端的机密信息,并在您的应用程序中使用您自己的服务器,然后服务器中继到其他网络服务。这样攻击者就永远无法访问机密。

    【讨论】:

    • 那么什么可以阻止其他人利用您的服务器?
    • @user1107412 取决于您对“利用”的定义。对于我的定义,无论客户端进行何种调用,都足以以一种不允许利用的方式设计您的 API。如果你对漏洞利用的定义是“运行第三方客户端而不是官方客户端”,那你就完蛋了。
    • 可以从任何地方访问服务器。因此,即使您只允许读取操作(例如 GET),您也会暴露数据,或者在最起码的情况下会暴露出流量。另一方面,如果您设计自己的服务器,以便它自己需要一组凭据/令牌,那么您只是添加了一个额外的抽象层。这就是我的愿景。
    【解决方案2】:

    一个好的建议是不要担心它。有很多应用程序以纯文本形式存储其 API 密钥。关键是您需要大量不同的信息来构建访问令牌。

    只要您不在文件系统上以纯文本形式存储用户名+密码组合,或者在没有 SSL/HTTPS 等的情况下通过网络传输它们,就可以了。

    【讨论】:

      猜你喜欢
      • 2020-09-21
      • 2011-12-29
      • 1970-01-01
      • 1970-01-01
      • 2011-06-27
      • 2012-01-17
      • 2011-09-14
      • 1970-01-01
      • 2013-06-03
      相关资源
      最近更新 更多