我有一个为用户存储数据的网站。我正在开发一个Wordpress插件,它将允许其他网站访问为每个用户存储的数据并上传新的数据。
例如,Joe在我的网站上创建一个帐户并上传信息。Joe在他自己的网站上安装了这个插件,这样他就可以从自己的网站访问存储在我网站上的数据。
访问乔网站将能够上传数据到乔的帐户在我的网站上。乔的网站将决定谁可以访问,谁可以修改,谁可以上传新的信息到乔的帐户在我的网站。
我考虑在我的网站上发布一个API,让Wordpress插件访问它。我知道Joe的网站将有一个api密钥,这将允许他的网站认证到我的网站。然而,怎样才能阻止其他人使用API密钥并假装是Joe的网站呢?
我已经看到了我想要做的类似的实现,当我检查客户端的代码时,我可以看到api键。怎样才能阻止我使用api密钥并假装是网站呢?
是否有一种方法来保护API密钥,这样访问Joe网站的人就不会看到它?
我在这里看到了这个答案:如何安全使用api键
然而,当Joe的网站将其发布到我的网站请求时,访问者不会仍然能够看到钥匙吗?
谢谢。
发布于 2013-09-28 14:36:44
API密钥将在另一个网站的服务器端用于与您的网站进行通信,因此客户端将无法看到它。
API键不能从用户浏览器直接用于访问站点资源,因为由于安全风险,跨站点请求伪造将被浏览器阻塞。
如果对您的站点的请求也是加密的(https),那么即使有人以某种方式监视流量,他也无法获取API密钥。
如何实现它:
您应该有一个可以处理其他站点请求以更新用户配置文件的URL,例如:
www.yoursite.com/api/updateprofile现在,您应该决定是否要支持GET/POST请求提供的数据(或者两者都支持)。
例如,如果您想要支持GET请求,那么告诉其他站点他们可以在上面的Url上执行操作,给出参数: api_key、user_id、first_name (可选)、last_name (可选)
站点中使用的示例:
www.yoursite.com/api/updateprofile?api_key="key"&user_id=1&first_name="joe's new first name!"为了在您的站点上实现它,只需解析请求并尝试获取参数,同时验证API密钥。
--我认为PHP中的语法类似于以下内容,但我不确定:
var api_key = GET["api_key"];
var user_id = GET["user_id"];更新2:
下面是一个给您演示的图表:
Joe的用户浏览器<-->>Joe的服务器--(API_KEY)-->您的站点API
客户端无法访问密钥,因为Joe的服务器根本不将其发送给客户端,客户机甚至不知道您的站点存在。
https://stackoverflow.com/questions/19068030
复制相似问题