限制PHP API仅适用于保存在我的数据库中的特定域名
限制特定域名对保存在我的数据库中的PHP API的访问
在进行服务器到服务器的调用时,无法可靠地检查引用来源(referrer)和源(origin)头文件,因为引用来源和源头头文件可以由编码人员设置,因此容易被伪造。在服务器到服务器的调用中,最好的做法是将被允许调用您的API的IP地址列入白名单。在这种情况下,可以使用类似于如下链接中所示的方法获取服务器的真实IP,并与白名单中的IP进行验证。
如下是在浏览器中进行的JS调用的示例,假设您信任浏览器。这种情况下,唯一可行的方法是通过验证引用来源和源头头文件来实现。尽管仍然可以使用浏览器插件或者像Postman这样的工具来伪造,所以不建议在高安全性要求的场景中使用。以下是一个PHP示例,用于验证源头或引用来源。
$origin_url = $_SERVER['HTTP_ORIGIN'] ?? $_SERVER['HTTP_REFERER']; $allowed_origins = ['example.com', 'gagh.biz']; // 替换为查询域名的代码。 $request_host = parse_url($origin_url, PHP_URL_HOST); $host_domain = implode('.', array_slice(explode('.', $request_host), -2)); if (! in_array($host_domain, $allowed_origins, false)) { header('HTTP/1.0 403 Forbidden'); die('You are not allowed to access this.'); }
还可以选择使用CORS头文件,如下链接中所述。
然后,其他API是如何实现这一点的呢?他们使用了上述方法的组合。他们可以按IP地址进行白名单设置,使用CORS,对于更有价值的数据使用更强的身份验证,采用限制并发使用等方式。我已经解释了谷歌API是如何实现的。你似乎认为我们故意不告诉你某种神奇的答案,但实际上并不存在这样的答案。
如果您的项目非常重要,并且对这个问题有很大担忧,那么您应该聘请一位具有Web应用程序和API经验的安全顾问。当他们在比这里更详细地分析了您的所有要求、限制和用例之后,您可能会得到更多定制的建议和路线图。在这个由志愿者运营的网站上,我们通常只能提供一般建议,我们没有时间详细询问您应用程序的每个细节,以便为您的确切情况提供最佳解决方案。这是您需要做的工作。
此外,还有一些非技术性的减轻措施。设置明确的服务条款,明确提到如果用户不当地与他人共享凭据或API密钥,则可能撤销用户的帐户,并且对于不当使用凭据的人可能会被禁止使用服务。并且根据适当的方式版权/许可您的内容,以便对其不当使用产生法律后果。有关更多详细信息,请咨询具有相关经验的律师。
可能还有其他考虑因素,可以参考以下链接:
[quora.com/...](https://www.quora.com/How-does-Netflix-prevent-users-from-downloading-streamed-video-content)。我怀疑Netflix客户端通过了比简单的主机密钥更复杂的身份验证与服务器进行身份验证。