2010-12-13 126 views
3

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

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

+2

你有什么样的api和钥匙?如果它是OAuth'application_key'和'application_secret',那么你与此无关,因为你必须**将它们存储在手机上。是的,可以提取它们并完成API允许您手动执行的所有操作。 – zerkms 2010-12-13 07:46:07

回答

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,否则任何人都可以嗅出费多少力气。

+1

这是用于存储用户的密码。但开发人员的钥匙必须包含在应用程序中 – user102008 2011-09-22 02:08:19

相关问题