php-为Web应用程序分发和使用API密钥
作者:互联网
我有一个Web应用程序,正在为其构建一个Drupal模块,该模块允许我的客户访问我的应用程序上的某些数据.
我打算将秘密的API密钥分发给需要在其Drupal模块副本中输入该值的客户.然后,这个Drupal模块与我的Web应用程序进行对话,但是我需要确保POST请求确实来自该来源.
如何使用此“秘密密钥”传递一些信息,以便当我的应用程序收到它时,它将知道:
(a) its from that client's server.
(b) it hasnt been eavesdropped on / copied and used by someone else?
我是否应该使用此API密钥作为密码来加密一些与POST请求其余部分匹配的数据?接收到它后,我会使用其API密钥的副本对其进行解密,如果它与其余数据匹配,我认为它已通过验证?
有没有适合我的框架? Zend内有东西吗?
解决方法:
使用HTTPS并仅在请求中发送API密钥.就这么简单.
如果您使用HTTP,那么您将重新发明轮子.
更新:
这是阅读评论后的更新,因为在这个问题中您没有解释要向网站访问者提供API密钥(在这种情况下,无论您做什么都将被搞砸).
juanpaco的评论解释了怎么做(以及我最初认为您正在做的事情),但是我将尝试更详细地解释它.
最重要的是,您不要在Web表单中使用API密钥. API密钥仅用于客户服务器和API服务器之间的通信.
这是一个简化的解释:
>您给客户一个密钥和一些要在其服务器上安装的软件/模块/库.
>访客访问客户的网站时,他会看到由模块生成的一些HTML,其中不包含任何API密钥,并且只能与客户的服务器通信(如果涉及任何敏感信息或用户帐户,则可以使用HTTPS进行通信).
>客户服务器上的模块从访问者那里获取请求.
>您的模块使用API密钥(带有HTTPS)连接到服务器.
>您的API服务器响应客户的服务器.
>客户的服务器响应访客.
您的API密钥永远不会以明文形式发送,也永远不会提供给网站访问者.
这是使用API密钥的唯一合理方法,在我首先阅读您的问题之后,我假设您担心在服务器与客户服务器之间发送API密钥的安全性.
如果您的客户将其密钥提供给其网站的每个访问者,那么这些访问者将始终能够知道它们,无论您尝试如何努力.提供访问者API密钥并使其可以使用但无法读取将是不可能的.不难-不可能.无论使用哪种协议,加密或任何使用方式.
(感谢juanpaco将这个旧答案提请我注意.)
标签:security,web-applications,api-key,php 来源: https://codeday.me/bug/20191102/1994439.html