2013-09-28 100 views
0

我有一个存储用户数据的网站。我正在开发一个Wordpress插件,允许其他网站访问为每个用户存储的数据并上传新数据。确保API密钥的安全

例如,乔在我的网站上创建一个帐户并上传信息。 Joe在他自己的网站上安装插件,这将使他能够访问他存储在我网站上的数据。

Joe网站的访问者将能够在我的网站上将数据上传到Joe的帐户。 Joe的网站将决定谁可以访问,谁可以修改,谁可以在我的网站上将新信息上传到Joe的帐户。

我想过在我的网站上发布API并让Wordpress插件访问它。据我所知,乔的网站会有一个API密钥,允许他的网站通过我的网站进行身份验证。但是,会阻止其他人使用该API密钥并假装成Joe的网站?

我已经看到了我想要做的类似实现,当我检查客户端上的代码时,我可以看到api键。什么会阻止我使用该API密钥并假装成为网站?

有没有一种方法来保护API密钥,以便乔的网站访问者没有看到它?

我看到这个答案在这里:How to securely use api key

但是不会访问者仍然能够看到关键时候乔的网站张贴在请求我的网站?

谢谢。

回答

4

该API密钥将用于其他网站的服务器端与您的网站 进行通信,因此客户端将无法看到它。

无法直接从用户浏览器使用API​​密钥来访问您的网站资源,因为此时它将是由于安全风险而被浏览器阻止的Cross-site request forgery

如果对您网站的请求也被加密(https),那么即使某人以某种方式观看流量,他也无法获取API密钥。

如何实现它:

你应该有可以处理其他网站请求更新用户配置文件的URL,例如:

www.yoursite.com/api/updateprofile 

现在,你应该决定是否要支持GET/POST请求(或支持两者)提供的数据。

例如,如果你想支持GET请求,然后告诉其他网站,他们可以在URL上执行以上操作,用给定参数: API_KEY,USER_ID,FIRST_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的服务器根本不会将它发送给客户端,因此客户端甚至不知道您的站点存在。

+0

这是有道理的。谢谢。因此,在乔的网站上运行的Wordpress插件应该有一个PHP脚本,当Joe的访客将他们想要加载到Joe的帐户的信息发布到我的网站时,而不是直接发布到我的网站上,他们会发布到Joe的服务器中的php脚本,反过来会发布到我的网站?那我该怎么去实现呢?谢谢 – jdias

+0

我已更新我的答案 –

+0

感谢您更新您的答案。但是,如果joe的访问者检查joe的网站中的页面,那么api密钥是不是可见的?或者你的意思是打电话给我的网站将从乔的网站,而不是从浏览器的PHP脚本完成? – jdias