2

我正在努力在 PHP 上构建基于 API 的体系结构。

我想确保尝试使用不同 API 密钥使用我的 API 的客户端是授权客户端。例如,API 密钥“ABCD1234”分配给域“example.com”。如果域“fraud.com”尝试使用此 API 密钥,他们应该无法使用该 API。如何在 API 端实现此检查?

根据我到目前为止所看到的,客户很容易将引荐来源标头传递给“伪造”它的真实身份。

另外我还依稀记得 Google Maps 刚推出 API 时,他们实现了类似的技术,只有授权的 URL 才能使用相应的 API Key。所以这似乎不是不可能的。

任何帮助/方向将不胜感激。

谢谢,

-安全

4

1 回答 1

1

在服务器到服务器的场景中,您对域几乎无能为力,因为不一定涉及任何域。它只是源自某个 IP 的传入 (HTTP) 请求。该 IP 不一定必须绑定到 DNS 系统中的任何主机条目。您能做的最好的事情就是要求您的客户注册允许的 IP 地址。由于各种原因,反向 DNS 解决方案不可行,尤其是因为它们需要客户端正确设置反向 DNS,这可能不切实际。

如果用例是浏览器端的,您可以使用 Google Maps 方法,在这种方法中,您需要客户端包含来自服务器的脚本,该脚本会检查当前页面在浏览器中的位置。尽管如此,即使这也不是完全的脾气证明,就像任何客户端一样。检查 HTTP Referer 服务器端也是一种选择,但也很容易被任何真正想要的人破坏。结合起来,它可以使它变得足够困难,因此大多数滥用者都会被吓倒。

于 2012-10-31T20:36:05.593 回答