在iPhone应用程序中的安全使用REST API当(Security When Using RES

2019-07-21 04:26发布

我知道这个问题已经以各种形式问过。 不过,我不找了“使用https”的答案。 我已经使用HTTPS,我不担心有效载荷的灵敏度被来回传输。

然而,我工作的一个iPhone应用程序在谈论到我建立了一个REST API(我有应用程序和服务器的控制 - 因此,任何建议,欢迎)。

我用于身份验证的OAuth2用户协议,这意味着,我的“API密钥”是一个客户端ID和客户端密钥, 只有需要被发送到获取的组合access_token 。 在此之后,所有的请求被发送到使用所述服务器access_token和含有该请求主体的HMAC(利用客户端秘密作为密钥)的报头。 此另外的唯一原因,是因为这样的人不能让与只是一个API请求access_token

被公开的是我说的是要的API,当我松开应用。 所以我并不担心别人能够进行API调用它。

我关心的是:

  • 人们能够使用我的应用程序的客户端凭证(这意味着我无法检测在服务器端,它不是来自我的应用程序)调用API
  • 人们能够滥用额外的范围,我的客户端ID将让他们有和传统的API用户将不必

我的猜测是,有没有真正解决这个问题的解决方案(比使用一个UIWebView并作出荣耀的web应用程序等),但我想我会问在这里反正。

你所有能想到的,以保护客户端ID /客户端密钥的路要走,如果它需要由应用程序消耗?

Answer 1:

我知道这是不是你所希望看到的答案,但不幸的是,我不认为你可以绝对保证达到自己的目标。 在这一天结束时,你不能相信一个客户端,你无法控制,一旦离开你的手,你不控制它。

为了实现自己的两个目标,需要验证客户端访问API被写了你。 要做到这一点的方法是使用公钥/私钥对。 您需要嵌入一个私钥到,它可以使用签名的东西客户端。 这样,服务器知道该请求来自你的客户,而不是别人的。 这也可以限制只有你的客户一定的呼叫。

然而,这不是防弹的,因为一个精明的用户可以进行反向工程和提取您的应用程序的私有密钥,并用它来欺骗源。 虽然没有防弹,这是防弹,因为这样做将需要的工作很多,将是技术性很强的,特别是如果你使用反-RE技术,如缓冲拖尾,质量红鲱鱼等。

如果我是你,我会问自己,会造成什么样的伤害,如果有人肯定砍死它。 如果你是Facebook的它是灾难性的。 如果你是一个服务的内部组织也可能不是一个大不了的。 如果您不能负担一个单一的滥用,那么你需要重新考虑你的设计,因为这个人是行不通的。 你根本不能信任的代码,你不用管了,你不要再控制客户端曾经是别人的设备上。



文章来源: Security When Using REST API in an iPhone Application