如何通过 Nginx 限制对浏览器上运行的门户的 API 访问

如何通过 Nginx 限制对浏览器上运行的门户的 API 访问

设想

我有一个带有 api 服务器和前端(在浏览器上运行的静态网站)的系统,它们在 2 个域名 a.example.com 和 a-api.example.com 下公开可用

问题

如何将对 a-api.example.com 上的 api 的访问限制为仅供我的前端使用(例如,没有人可以随意curl访问它)?或者完全有可能吗?

如果您可以添加示例 nginx 块,那就太棒了。

答案1

您无法完全阻止 curl 调用。

但是,您可以通过要求将 HTTP referrer 标头设置为 api 来增加难度。您可以使用nginx HTTP referer 模块为此。示例配置:

server {
    valid_referers a-api.example.com;

    if ($invalid_referer) {
        return 403;
    }
}

这不会为您的网站增加任何安全性。恶意行为者在向 发出请求时添加所需的 HTTP 标头是小菜一碟a-api.example.com

因此,在 API 实施中采用最佳安全实践非常重要。

相关内容