【发布时间】:2011-10-23 20:52:17
【问题描述】:
我正在为网站创建一个 PHP API,我想限制 API 访问在我们服务器上注册的域(以防止滥用 API 使用)。所以,这就是我现在的方法,嗯,它在纸上看起来应该不错。
- API 设置在
api.example.com。 - 想要使用 API 的用户向我们注册,添加他的域并获得 API 密钥。
- API 的用户将使用他的 API 密钥来加密他的请求数据(通过
mcrypt)并通过cURL将其发送到api.example.com。 -
我的服务器会检查此 API 请求来自哪个域,并将该域与数据库中的 API 密钥进行匹配。如果有 API 密钥,API 通过
mcrypt使用该密钥解密请求,然后使用相同的方法加密并发送结果。
我被困在第 4 步。最初,我计划使用 HTTP_REFERER 来检查它,但由于 cURL 默认情况下不发送它,并且它很容易在用户端代码中伪造(CURLOPT_REFERER 就我而言记住),我被困在这里了。
有没有办法知道这个 API 请求来自哪个域?我看到它可以使用一些流行的 API 来完成,比如 reCAPTCHA 之一。检查 _SERVER["REMOTE_HOST"] 并不是一个真正的选择,因为共享主机(它们具有相同的 IP),因此这将无法防止滥用(无论如何这主要来自共享服务器)。
有没有这样的方法来检查它?谢谢!
【问题讨论】: