我有 nginx 在 api.example.com 上提供 python REST API。当用户进入 example.com 时,用户会向 api.example.com 发出几个 AJAX 请求。如果用户不在 example.com 上,是否可以阻止对 API 的请求?CORS 能帮我吗?提前谢谢!
这里的目标是使 API 只能从主网站访问,并阻止外部网站访问。
答案1
AJAX 请求将有一个 referrer 标头,它将设置为请求来自的页面。您可以使用 FireBug 对此问题进行查看:
您可以在服务器端对此进行过滤。但是,如果用户足够坚定,伪造是很容易的。
另一种选择是,在最近 x 分钟内即时记录对您网站的请求,并交叉引用已知 IP 地址列表与每个 API 请求 - 但这也很容易被伪造,因为他们可以每隔几分钟轮询一次您的网站以在您的表中保留活动记录。
答案2
您要解决什么问题?您要阻止哪种请求?
通常,您需要检查Referer
标头,以确定资源的链接来源。但是,有人向您的 API 发出请求时,很容易伪造标头(如果这确实是您遇到的问题)。
在允许某人进行 API 调用之前,需要使用 CAPTCHA 来验证其是否是人类。