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

时间:2010-12-13 07:37:09

标签: php iphone api ios4

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

我猜我必须在iPhone应用程序中存储该API密钥,对吧?所以我的问题;将API密钥存储在iPhone应用程序中有风险吗?有人不能以某种方式访问​​我的API密钥并冒充iPhone应用程序从而获得对该网站的访问权限吗?或者这很难吗?如果我以错误的方式思考它,请告诉我是否有更好的方法。

2 个答案:

答案 0 :(得分:10)

无论你是否需要保密,你都必须加密和混淆它,只是为了保护自己免受偶然的黑客攻击。

另一方面,我不相信你能阻止坚定的黑客。越狱,gdb和交通嗅探器的组合将几乎击败你能想到的任何保护。投入大量资金进行此类保护很少有意义,因此您必须在浪费大量时间和精力以及让API密钥破解之间找到折衷方案。

就个人而言,我喜欢在应用程序二进制文件中以混淆的形式使用API​​密钥的想法,因为从App Store获取的二进制文件是加密的。使用PT_DENY_ATTACH进行一些小的ptrace()hackery可能会进一步复杂化(但绝不会完全阻止)通过gdb访问您的应用程序。有可能,这足以避免您的应用程序以解密形式在互联网上浮动。然后你将不得不使用HTTPS只是因为嗅探流量非常容易,甚至不需要越狱。

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

答案 1 :(得分:-1)

你可以使用钥匙串服务来存储密钥,就像Mac存储密码一样 - 不是100%肯定,但我认为它还会加密密码并将其保存在其他窥探手中的安全沙箱中(当然沙盒在越狱的iPhone上毫无意义使用Costique提到的合适工具)

无论哪种方式值得关注:

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

但绝对使用HTTPS,否则任何人都可以毫不费力地嗅探它。