0

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

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

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

我考虑在我的网站上发布一个 API 并让 Wordpress 插件访问它。我知道乔的网站会有一个 api 密钥,允许他的网站对我的网站进行身份验证。但是,什么会阻止其他人使用该 API 密钥并伪装成 Joe 的网站?

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

有没有办法保护 API 密钥,让 Joe 网站的访问者看不到它?

我在这里看到了这个答案:如何安全地使用 api 密钥

但是,当乔的网站将其发布到我的网站的请求上时,访问者是否仍然能够看到密钥?

谢谢。

4

1 回答 1

4

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

API Key 不能直接从用户浏览器访问您的站点资源,因为这将是跨站点请求伪造,由于安全风险而被浏览器阻止。

如果对您网站的请求也被加密(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 的服务器根本不将其发送给客户端,客户端甚至不知道您的站点存在。

于 2013-09-28T14:36:44.440 回答