2012-07-05 59 views
4

我有一个iPhone应用程序正在服务器上使用我的php api,但如果有人知道该URL,它目前是打开的。我想确保,直到我已经准备好,使之成为公共的API(如果我连做)保护对PHP API的访问

我已阅读this article但我不确定他们是什么意思时,他们说没有人可以使用这个API:

[CLIENT]在进行REST API调用之前,将许多独特的数据组合在一起(这通常是您打算发送的所有参数和值,这是AWS网站上代码片段中的“数据”参数)

我不明白如果我散列我计划发送的参数与我的api秘密如何这是mor如果我发送未加密的参数/值,则不仅仅是哈希api秘密。

+0

[保护web-API访问权限](http:// stackoverflow。com/questions/3130969/secured-web-api-access) – 2012-07-05 19:37:06

回答

5

HTTPS API并使用API​​密钥。然后你就会知道只有拥有密钥的人(你在这种情况下)才能访问API。

你对此没有任何担保是正确的。这就是为什么我建议你SSL连接。除非你打算加密你传送的所有信息。

公钥/私钥方案也可以很好地工作。 HTTPS非常需要最小努力

-1

为了开发目的,您可以使用您的Web服务器设置来仅允许来自您的IP的请求。

+1

嗯,我不是在谈论开发目的,我想在iphone应用程序中有一个API密钥/秘密。所以任何运行我的应用程序的iphone都将使用我的api密钥。在未来,如果我打算为其他用途打开api,我想确保它受到保护。 – mkral 2012-07-05 19:21:05

2

Digital signatures提供验证通过不安全连接发送的消息的方式。

设置:每个客户都会有自己的私钥公钥(只有私钥需要被存储在客户端)。服务器将存储每个客户端的公钥。公共密钥对所有人都是可见的,并且可以被服务器用来识别客户端。只有客户知道的私钥,它永远不会显示给任何人。

客户端签名请求:连同请求数据的其余部分,客户端将散列合并的请求数据并用私钥加密散列。服务器将以相同的方式生成哈希(将签名从哈希计算中除去),然后使用公钥对签名进行解密。如果哈希匹配,请求是真实的。

请注意,HTTPS允许客户端证书,因此您可以利用现有工具完成上述所有操作,而无需编写一行服务器端代码(您只需配置Web服务器;唯一的诀窍是使确保服务器只接受已有的证书)。此外,客户端代码的数量应该最小:您不需要做太多的事情就可以设置连接来使用客户端证书。由于您正在控制客户端,因此可以使用自签名证书并将该服务器添加为证书颁发机构。关于使用client certificates in iPhone apps有几个关于SO的问题;你可以从阅读他们开始。

还要注意,只要应用程序的副本在可信的​​范围内,任何保护Web API的方案都将发挥作用。如果任何人不信任他们,他们可以使用应用程序或提取应用程序使用的任何秘密数据并按照他们的意愿访问API。

+0

好吧,这是我的问题,但是,为什么你要结合数据并将其与api秘密散列呢?发送,然后发送未加密的数据?如何更安全,而不仅仅是散布api的秘密? – mkral 2012-07-05 19:31:24

+2

@mkral:不是,你很困惑。您可以将前缀和后缀等组合在一起,并将散列算法相乘,也可以将用户的ID和用户名组合在一起。这与您发送的实际数据无关,您将其与其他所有内容一起发送。 – 2012-07-05 19:33:07

+0

好的,谢谢。所以这只是复杂的哈希? – mkral 2012-07-05 19:35:19