概述:
我的公司开发了一个限速API。我们的目标有两个:
澄清:为什么要进行速率限制?
我们限制API的价格,因为我们将其作为产品的附加产品出售。匿名访问我们的API每小时的API调用门槛非常低,而我们的付费客户每小时允许调用1000次或更多。
The Problem:
我们的速率限制API对于开发者生态系统来说是很棒的,但是为了让我们给它喂食,我们不能允许它被限制在相同的速率限制下。我们的应用程序接口的前端都是JavaScript,对该应用程序接口进行直接Ajax调用。
所以问题是:
如何保护应用编程接口,使速率限制可以被移除,在移除过程中,这种速率限制在哪里不能被轻易地欺骗?
探索了解决方案(以及为什么它们不起作用)
问题:
我期待着Stack和Overflow上的才华横溢的人提出替代解决方案。你将如何解决这个问题?
发布于 2016-01-22 13:30:32
由于您自己的JavaScript客户端直接访问该应用程序接口,因此任何人都可以查看它所做的事情并对其进行模拟,包括使用相同的API键。你可以试着让它变得更困难,比如混淆你的代码,或者设置各种障碍,但是你和你试图约束的人基本上拥有相同的访问权限。您需要构建一个系统,在这个系统中,非官方客户端使用其作用域中的所有访问权限是完全可以的,但系统的安排方式是所有客户端的官方使用量更大,而不是试图在特权之间创建不同的权限。
这通常是通过每个用户的访问令牌来完成的,而不是整个应用程序使用一个令牌。对于API的典型使用来说,每个令牌的限制应该足够了,但对于试图滥用它的人来说,则是有限制的。例如,每分钟100个呼叫可能足以支持典型的浏览,但如果我想刮你,我不能在这个预算内有效地做到这一点。
总会有一场军备竞赛--我可以通过创建大量的机器人用户帐户来绕过这个限制。然而,如果你只是在你的注册流程中添加验证码,这是一个很好的解决问题,对真正的人类来说,这是一个很小的代价。当您进入这些场景时,一切都只是在方便和限制之间进行权衡。你永远不会找到完全防弹的东西,所以专注于把它做得足够好,等到有人利用你来了解漏洞在哪里。
发布于 2016-01-22 18:58:25
如果这给你带来了问题,它也会给你假定的开发人员生态系统带来问题(例如,当他们试图开发一个替代UI时)。如果您真的在吃自己的狗粮,那么让API (和速率限制)适用于您的应用程序。以下是一些建议:
这还没有回答你的问题吗?好吧,如果你真的需要做你所要求的,在认证阶段进行速率限制,并根据你的用户所在的组应用不同的速率限制。如果您使用一组凭据(由您的开发人员和QA团队使用),您将获得更高的速率限制。但是您可以立即看到为什么这将不可避免地将您引导到您的生态系统,看到您的开发人员和QA团队没有看到的问题。
发布于 2016-01-24 12:01:31
购买你的产品。成为你自己的付费客户。
匿名访问我们的API的门槛非常低,而我们的付费客户每小时允许调用1000次或更多。“
这也有助于从客户的角度测试系统。
https://stackoverflow.com/questions/34939229
复制相似问题