我有一个付费服务的API密钥。此API是从我的站点上未经身份验证的页面调用的。我正在通过我的后端服务器代理对付费服务的请求。我还在API中添加了CORS,以确保它是从我的站点调用的。
当用户通过浏览器访问THe时,上面的保护措施起作用。然而,API可以从邮递员那里访问,这可能会导致我为付费服务支付一大笔费用。对于我来说,确保API只从我的JS客户端调用的最好方法是什么?
发布于 2021-03-22 10:25:48
即使是不是网站的东西,比如嵌入式设备,也可以打开硬件,检查固件,或者在极端情况下,用电子显微镜检查芯片。对于网站来说,这是非常微不足道的。你的客户能做的任何事情,任何其他客户都能做到。这是互联网分散性质和网页工作方式所固有的。
你可以做一些事情来限制滥用,比如让你的服务器发出请求(而不是用户的浏览器),并限制它在你的用户出现时的速度。身份验证可能会使您限制每个用户的请求和/或传递账单。但是,实际上控制用于与您的服务器(或第三方服务器)对话的客户端是不可能的。充其量,您可以混淆您的代码,并试图隐藏访问密钥,但最终,您不能完全隐藏它。
发布于 2021-03-22 05:48:08
实现身份验证,并允许只为经过身份验证的用户代理请求。
否则,你的服务将随着时间的推移而被人们所熟知,其他人甚至公司都可以使用它,而你将无法阻止它。
发布于 2021-03-22 14:01:50
正如其他人所指出的,除非启用身份验证,否则如果API暴露在internet上,则不能完全阻止他人调用您的API。
如果您想限制使用并使滥用者不方便调用您的API,您可以在页面上发出令牌(CSRF令牌),并要求该令牌在API的请求中存在-这样,API就可以从发起页面加载的浏览器中调用。
如果没有后端发出的令牌,API将无法直接调用,但是当然有一些方法可以通过无头实现来实现web浏览器的自动化。
您可以基于IP地址实现服务器端配额
如果您的API中有重要的价值,动机充分的攻击者总是会找到绕过它的方法。
但是,您是否可能高估了该值?也许你可以采取一种迭代的方法:实现基本的速率限制,看看你得到了多少滥用,改进你的保障措施,或者当它产生超出你愿意接受的成本时禁用。
https://security.stackexchange.com/questions/246434
复制相似问题