在iPhone应用程序中存储API密钥是否不安全?

问题描述 投票:0回答:2

我正在创建一个 iPhone 应用程序,需要连接到基于 PHP 的网站。 iPhone 应用程序将检索并添加记录。我猜测网站和 iPhone 应用程序之间的通信应该由 API 密钥控制。 iPhone 应用程序提供它并由网站检查它。

我猜我必须将该 API 密钥存储在 iPhone 应用程序本身中,对吧?所以我的问题是;在 iPhone 应用程序中存储 API 密钥有风险吗?难道有人无法以某种方式访问我的 API 密钥并冒充 iPhone 应用程序,从而访问该网站吗?或者这很难做到?如果我的想法是错误的,请告诉我是否有更好的方法。

php ios ios4
2个回答
10
投票

无论您是否需要真正保密,您都必须对其进行加密和混淆,只是为了保护自己免受普通黑客的攻击。

另一方面,我不相信你能阻止一个坚定的黑客。越狱、gdb 和流量嗅探器的组合将击败几乎所有您能想到的保护措施。在此类保护上投入大量资金几乎没有意义,因此您必须在浪费大量时间和精力与让您的 API 密钥可被破解之间找到折衷方案。

就我个人而言,我喜欢在应用程序二进制文件中以模糊形式保存 API 密钥的想法,因为您从 App Store 获取的二进制文件是加密的。使用 PT_DENY_ATTACH 进行一点 ptrace() 黑客攻击可能会使通过 gdb 访问您的应用程序变得更加复杂(但永远不会完全阻止)。有可能,这足以避免您的应用程序以解密形式的种子在互联网上到处传播。那么你将不得不使用 HTTPS,因为嗅探流量非常容易,甚至不需要越狱。

还有一个更重要的考虑因素。如果无法使用 HTTPS,并且您必须在 HTTP 请求中发送 API 密钥,请忘记上述所有内容。如果应用程序包中的密钥通过网络以纯文本形式发送,那么保护它是没有意义的。


-1
投票

您可以使用钥匙串服务来存储密钥,就像 Mac 存储密码一样 - 不是 100% 确定,但我认为它也可以加密密码并将它们保存在安全的沙箱中以防止其他人窥探(当然,沙箱在越狱的 iPhone 上毫无意义)像 Costique 提到的正确工具)

无论哪种方式都值得研究:

http://developer.apple.com/library/ios/#documentation/Security/Conceptual/keychainServConcepts/iPhoneTasks/iPhoneTasks.html

但一定要使用 HTTPS,否则任何人都可以毫不费力地嗅到它。

© www.soinside.com 2019 - 2024. All rights reserved.