代码之家  ›  专栏  ›  技术社区  ›  jabley

作为iPhone应用程序一部分保护API凭据的最佳实践

  •  4
  • jabley  · 技术社区  · 15 年前

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

    1. 推特
    2. 比特
    3. 脸谱网

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

    推特

    • 我有一个启用了xauth的密钥和秘密。两者都需要被iPhone应用程序使用。

    攻击产生的放射性沉降物

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

    比特

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

    攻击产生的放射性沉降物

    • 恶意用户可以在我的bit.ly帐户上创建链接。他们需要单独攻击蛮力或者获得登录帐户的密码。

    对于这两种服务,潜在的危害似乎不太大。但对于其他服务来说,情况可能更糟。

    我可以将API凭证定义为头中的字符串或代码中的内嵌字符串,但这样会对使用 在应用程序上查看其中的内容。

    然后我可以在代码中执行愚蠢的串联/异或操作,以便在内存中重新创建API密钥,攻击者将不得不做更多的工作来恢复二进制文件中的任何密钥。我担心的是,我不是一个密码学家,会在那里制造出一种令人难堪的弱模糊形式。

    人们有什么更好的建议?

    2 回复  |  直到 15 年前
        1
  •  4
  •   CodesInChaos    15 年前

    即使是SSL也没什么帮助,因为您可以截获接收未加密数据的网络API。

    解决这个问题的安全方法是创建自己的服务器,保留服务器端的秘密,并从应用程序中使用自己的服务器,然后服务器转发到其他Web服务。这样攻击者就永远无法访问秘密。

        2
  •  -1
  •   Tony Million    15 年前

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

    只要你不将用户名+密码组合以纯文本形式存储在文件系统中,或者不使用ssl/https等通过网络传输它们,那么你就没事了。