保护对PHP API的访问

保护对PHP API的访问,php,iphone,api,rest,hash,Php,Iphone,Api,Rest,Hash,我有一个iPhone应用程序正在服务器上使用我的php api,但如果有人知道url,它当前是打开的。我想确保在我准备将此API变成公共API之前,没有人可以使用它(如果我真的这样做了) 我读过,但我不确定他们说: [CLIENT]在进行REST API调用之前,将一组独特的数据组合在一起(这通常是您打算发送的所有参数和值,它是AWS站点代码段中的“数据”参数) 我不明白如果我用api密钥散列我计划发送的参数,那么如果我未加密发送参数/值,这比散列api密钥更安全。出于开发目的,您可以使用web

我有一个iPhone应用程序正在服务器上使用我的php api,但如果有人知道url,它当前是打开的。我想确保在我准备将此API变成公共API之前,没有人可以使用它(如果我真的这样做了)

我读过,但我不确定他们说:

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


我不明白如果我用api密钥散列我计划发送的参数,那么如果我未加密发送参数/值,这比散列api密钥更安全。

出于开发目的,您可以使用web服务器设置仅允许来自ip的请求。

HTTPS api并使用api密钥。然后您就会知道,只有拥有密钥的人(在本例中是您)才能访问API

你说得对,它不太安全。这就是为什么我建议您使用SSL连接。除非你打算加密你来回传输的所有东西

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

提供了一种验证通过不安全连接发送的消息的方法

设置:每个客户端都有自己的私钥公钥(只有私钥需要存储在客户端上)。服务器将存储每个客户端的公钥。公钥可以对所有人都可见,并且可以被服务器用来标识客户端。私钥只有客户端才知道,它从不向任何人显示

客户端对请求进行签名:与其余的请求数据一起,客户端将散列组合的请求数据,并使用私钥对散列进行加密。服务器将以相同的方式生成散列(将签名排除在散列计算之外),然后使用公钥解密签名。如果哈希匹配,则请求是可信的

请注意,HTTPS允许客户端证书,因此您可以利用现有工具来完成上述所有操作,而无需编写一行服务器端代码(您只需配置web服务器;唯一的技巧是确保服务器只接受它已经拥有的证书)。此外,客户端代码的数量应该是最小的:您不需要做更多的事情,只需要设置连接来使用客户端证书。由于您控制客户端,因此可以使用自签名证书并将服务器添加为证书颁发机构。有很多关于使用的问题;你可以从通读它们开始


还要注意的是,任何保护web API的方案只有在应用程序的副本处于可信的手中时才有效。如果任何不值得信任的人获得了它,他们可以使用该应用程序或提取该应用程序使用的任何机密数据,并按自己的意愿访问API。

我不是说开发目的,我想在iphone应用程序中拥有API密钥/机密。因此,任何运行我的应用程序的iphone都将使用我的api密钥。在将来,如果我计划将api用于其他用途,我希望确保它受到保护。好吧,这是我的问题,为什么要将数据合并并使用api机密对其进行散列?发送那个,然后发送未加密的数据?这比散列api秘密更安全吗?@mkral:不是,你很困惑。您可以组合前缀和后缀等内容,以及乘以哈希算法,也可以组合用户的ID和用户名。它与您发送的实际数据无关,与其他所有数据一起发送。私钥应仅为客户端所知。如果服务器上存在数据库漏洞,则私钥可能被盗。的可能重复项