2012-10-24 30 views
0

嵌入API证书我要打电话从iOS的代码支付网关API。问题是它需要商家凭证,我感到不安全将商户凭证嵌入代码中。如果有人以某种方式对代码进行反向工程并获得凭据,那么客户端已经死亡。有什么建议?在iOS的代码

我发现这个职位Does Apple modify iOS application executables on apps submitted to the App Store?它说,应用程序二进制文件是由苹果加密是默认。这是否意味着我可以安全地将凭证嵌入代码中?

+0

号从来没有在未加密的代码(字符串,Plist档案)曾嵌入关键资源。不仅是简单的捆绑资源(例如未加密),而且Objective-C代码的动态特性意味着它可以轻松地进行反向设计。这与'const NSStrings *'在二进制级别**缓存的事实相结合**。 – CodaFi

+0

那么你有什么建议?我应该加密凭据并将它们放在plist文件中。假设加密算法和密钥在代码中,并且是安全的,因为二进制文件是由苹果加密和签名的,而类不能被反向设计。或者是其他东西? –

+0

有没有真正的方法来嵌入凭据的方式,使他们无法被确定获取它们的人恢复。我也看到有人认为与HTTPS传输秘密将保证他们的安全,但事实并非如此,因为(你必须给设备,因此上安装证书,你可以使用代理,如查尔斯,它可以让你记录网络流量信任代理)。 –

回答

2

NO!您应该考虑设置一个处理与API交互的服务器,而不是将凭据添加到iOS应用程序,而是让您的应用程序只与您的服务器交互。因此,您可以将API密钥存储在服务器上,并且可以限制服务器端用户的可能性(这将更难以滥用)。

+2

这难道不就是在路上踢吗?那么你如何确保你的应用程序是唯一可以向这个新服务器请求的应用程序? –

+0

不可以。如果您获得该服务的API密钥,则可以完成该服务可能执行的所有操作。如果将密钥存储在服务器上,则服务器软件可能会限制可以执行的操作。如果您的服务也使用身份验证,您还可以了解何时有人试图滥用您的服务。 – miho

+0

好点。这似乎是一种很好的风险缓解措施,特别是对于授予“一揽子”密钥的服务,您可以从字面上执行用户可能被授权执行的任何操作,而事实上,您的应用程序实际上只需执行其中的一部分操作。 –