首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何确保我的API只被我的客户调用?

如何确保我的API只被我的客户调用?
EN

Security用户
提问于 2021-03-22 04:08:40
回答 9查看 30.9K关注 0票数 44

我有一个付费服务的API密钥。此API是从我的站点上未经身份验证的页面调用的。我正在通过我的后端服务器代理对付费服务的请求。我还在API中添加了CORS,以确保它是从我的站点调用的。

当用户通过浏览器访问THe时,上面的保护措施起作用。然而,API可以从邮递员那里访问,这可能会导致我为付费服务支付一大笔费用。对于我来说,确保API只从我的JS客户端调用的最好方法是什么?

EN

回答 9

Security用户

发布于 2021-03-22 10:25:48

即使是不是网站的东西,比如嵌入式设备,也可以打开硬件,检查固件,或者在极端情况下,用电子显微镜检查芯片。对于网站来说,这是非常微不足道的。你的客户能做的任何事情,任何其他客户都能做到。这是互联网分散性质和网页工作方式所固有的。

你可以做一些事情来限制滥用,比如让你的服务器发出请求(而不是用户的浏览器),并限制它在你的用户出现时的速度。身份验证可能会使您限制每个用户的请求和/或传递账单。但是,实际上控制用于与您的服务器(或第三方服务器)对话的客户端是不可能的。充其量,您可以混淆您的代码,并试图隐藏访问密钥,但最终,您不能完全隐藏它。

票数 70
EN

Security用户

发布于 2021-03-22 05:48:08

实现身份验证,并允许只为经过身份验证的用户代理请求。

否则,你的服务将随着时间的推移而被人们所熟知,其他人甚至公司都可以使用它,而你将无法阻止它。

票数 39
EN

Security用户

发布于 2021-03-22 14:01:50

正如其他人所指出的,除非启用身份验证,否则如果API暴露在internet上,则不能完全阻止他人调用您的API。

如果您想限制使用并使滥用者不方便调用您的API,您可以在页面上发出令牌(CSRF令牌),并要求该令牌在API的请求中存在-这样,API就可以从发起页面加载的浏览器中调用。

如果没有后端发出的令牌,API将无法直接调用,但是当然有一些方法可以通过无头实现来实现web浏览器的自动化。

您可以基于IP地址实现服务器端配额

如果您的API中有重要的价值,动机充分的攻击者总是会找到绕过它的方法。

但是,您是否可能高估了该值?也许你可以采取一种迭代的方法:实现基本的速率限制,看看你得到了多少滥用,改进你的保障措施,或者当它产生超出你愿意接受的成本时禁用。

票数 27
EN
页面原文内容由Security提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://security.stackexchange.com/questions/246434

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档