Coders Conquer Security OWASP Top 10 API Series - 缺少资源和速率限制

发表于2020年9月30日
作者:Matias Madou
仔细说来?

毋庸置疑,这是个很好的机会。悬浮在空中的各种元素的三层结构。他说:"我的意思是说,我可以在这里工作,但我不能在这里工作,因为我不能在这里工作,因为我不能在这里工作。在这里,我想说的是,我们要做的是,在我们的生活中,我们要做的是,在我们的生活中,我们要做的是,在我们的生活中,我们要做的是。在这里,我想说的是,我们的生命力是有限的。

随着资源的缺乏和速率的限制,API漏洞的行为几乎与标题所描述的完全一样。每个API都有有限的资源和计算能力,这取决于它的环境。大多数还需要处理来自用户或其他程序的请求,要求它执行所需的功能。当有太多的请求同时进来,而API没有足够的计算资源来处理这些请求时,就会出现这种漏洞。然后,API可能变得不可用或对新的请求没有反应。

如果API的速率或资源限制没有被正确设置,或者限制没有在代码中被定义,那么API就很容易出现这个问题。例如,如果一个企业经历了一个特别繁忙的时期,一个API就会超载。但这也是一个安全漏洞,因为威胁者可以故意让未受保护的API的请求超载,以便进行拒绝服务(DDoS)攻击。  

顺便问一下,到目前为止,你在API游戏化挑战中表现如何?如果你现在就想试试你处理速率限制性漏洞的技巧,请踏上竞技场。

现在,让我们再深入了解一下。

缺乏资源和速率限制了API的脆弱性,有哪些例子?

这个漏洞有两种方式可以潜入API。第一种是当编码员根本没有定义API的节流率是多少。在基础设施的某个地方可能有一个默认的节流率设置,但依赖这个设置并不是一个好的策略。相反,每个API应该单独设置其速率。这一点尤其正确,因为API的功能和可用资源可能有很大的不同。

例如,一个旨在为少数用户服务的内部API可以有一个非常低的节流率,并且工作得很好。但是,一个面向公众的API,作为一个实时电子商务网站的一部分,很可能需要定义一个特别高的速率,以补偿可能出现的同步用户激增的情况。在这两种情况下,应该根据预期的需求、潜在用户的数量和可用的计算能力来定义节流率。

这可能是很诱人的,特别是对于那些很可能非常繁忙的API来说,将速率设置为无限,以尝试最大化性能。这可以通过一段简单的代码来实现(作为一个例子,我们将使用Python Django REST框架)。

"DEFAULT_THROTTLE_RATES: {
       "anon: None,
       "user: None

在这个例子中,匿名用户和系统已知的用户都可以无限次地联系API,而不考虑一段时间内的请求数量。这是一个坏主意,因为无论一个API有多少可用的计算资源,攻击者可以部署像僵尸网络这样的东西,最终使它慢到爬行,或者可能使它完全脱机。当这种情况发生时,有效用户将被拒绝访问,而攻击也将成功。

消除资源匮乏和速率限制的问题

每一个由组织部署的API都应该在其代码中定义其节流率。这可能包括诸如执行超时、允许的最大内存、每页可返回给用户的记录数,或在定义的时间范围内允许的进程数。

从上面的例子来看,与其让节流率大开大合,不如严格定义匿名和已知用户的不同速率。

"DEFAULT_THROTTLE_RATES: {
       "anon: config("THROTTLE_ANON, default=200/hour),
       "user: config("THROTTLE_USER, default=5000/hour)

在新的例子中,API将限制匿名用户每小时发出200次请求。已经被系统审核过的已知用户会有更大的回旋余地,每小时有5000个请求。但即使是他们也受到限制,以防止在高峰期意外超载,或者在用户账户被泄露并被用于拒绝服务攻击时进行补偿。

作为最后一个要考虑的良好做法,当用户达到节流限制时,向他们显示一个通知,同时解释这些限制何时会被重置,这是一个好主意。这样一来,有效用户就会知道为什么一个应用程序拒绝他们的请求。如果执行批准任务的有效用户被拒绝访问API,这也是有帮助的,因为它可以向运营人员发出信号,表明需要增加节流。

请查看 Secure Code Warrior博客页面,了解有关这一漏洞的更多见解,以及如何保护你的组织和客户免受其他安全缺陷的蹂躏。你也可以尝试一下 Secure Code Warrior 培训平台的演示,以保持你所有网络安全技能的磨练和更新。

查看资源

想要更多吗?

在博客上深入了解我们最新的安全编码见解。

我们广泛的资源库旨在增强人类对安全编码技术提升的方法。

查看博客
想要更多吗?

获取关于开发者驱动的安全的最新研究

我们广泛的资源库充满了有用的资源,从白皮书到网络研讨会,让你开始使用开发者驱动的安全编码。现在就去探索它。

资源中心

Coders Conquer Security OWASP Top 10 API Series - 缺少资源和速率限制

发表于2023年2月3日
作者:Matias Madou

随着资源的缺乏和速率的限制,API漏洞的行为几乎与标题所描述的完全一样。每个API都有有限的资源和计算能力,这取决于它的环境。大多数还需要处理来自用户或其他程序的请求,要求它执行所需的功能。当有太多的请求同时进来,而API没有足够的计算资源来处理这些请求时,就会出现这种漏洞。然后,API可能变得不可用或对新的请求没有反应。

如果API的速率或资源限制没有被正确设置,或者限制没有在代码中被定义,那么API就很容易出现这个问题。例如,如果一个企业经历了一个特别繁忙的时期,一个API就会超载。但这也是一个安全漏洞,因为威胁者可以故意让未受保护的API的请求超载,以便进行拒绝服务(DDoS)攻击。  

顺便问一下,到目前为止,你在API游戏化挑战中表现如何?如果你现在就想试试你处理速率限制性漏洞的技巧,请踏上竞技场。

现在,让我们再深入了解一下。

缺乏资源和速率限制了API的脆弱性,有哪些例子?

这个漏洞有两种方式可以潜入API。第一种是当编码员根本没有定义API的节流率是多少。在基础设施的某个地方可能有一个默认的节流率设置,但依赖这个设置并不是一个好的策略。相反,每个API应该单独设置其速率。这一点尤其正确,因为API的功能和可用资源可能有很大的不同。

例如,一个旨在为少数用户服务的内部API可以有一个非常低的节流率,并且工作得很好。但是,一个面向公众的API,作为一个实时电子商务网站的一部分,很可能需要定义一个特别高的速率,以补偿可能出现的同步用户激增的情况。在这两种情况下,应该根据预期的需求、潜在用户的数量和可用的计算能力来定义节流率。

这可能是很诱人的,特别是对于那些很可能非常繁忙的API来说,将速率设置为无限,以尝试最大化性能。这可以通过一段简单的代码来实现(作为一个例子,我们将使用Python Django REST框架)。

"DEFAULT_THROTTLE_RATES: {
       "anon: None,
       "user: None

在这个例子中,匿名用户和系统已知的用户都可以无限次地联系API,而不考虑一段时间内的请求数量。这是一个坏主意,因为无论一个API有多少可用的计算资源,攻击者可以部署像僵尸网络这样的东西,最终使它慢到爬行,或者可能使它完全脱机。当这种情况发生时,有效用户将被拒绝访问,而攻击也将成功。

消除资源匮乏和速率限制的问题

每一个由组织部署的API都应该在其代码中定义其节流率。这可能包括诸如执行超时、允许的最大内存、每页可返回给用户的记录数,或在定义的时间范围内允许的进程数。

从上面的例子来看,与其让节流率大开大合,不如严格定义匿名和已知用户的不同速率。

"DEFAULT_THROTTLE_RATES: {
       "anon: config("THROTTLE_ANON, default=200/hour),
       "user: config("THROTTLE_USER, default=5000/hour)

在新的例子中,API将限制匿名用户每小时发出200次请求。已经被系统审核过的已知用户会有更大的回旋余地,每小时有5000个请求。但即使是他们也受到限制,以防止在高峰期意外超载,或者在用户账户被泄露并被用于拒绝服务攻击时进行补偿。

作为最后一个要考虑的良好做法,当用户达到节流限制时,向他们显示一个通知,同时解释这些限制何时会被重置,这是一个好主意。这样一来,有效用户就会知道为什么一个应用程序拒绝他们的请求。如果执行批准任务的有效用户被拒绝访问API,这也是有帮助的,因为它可以向运营人员发出信号,表明需要增加节流。

请查看 Secure Code Warrior博客页面,了解有关这一漏洞的更多见解,以及如何保护你的组织和客户免受其他安全缺陷的蹂躏。你也可以尝试一下 Secure Code Warrior 培训平台的演示,以保持你所有网络安全技能的磨练和更新。

输入你的详细资料以获取完整的报告。

我们希望得到您的许可,向您发送有关我们产品和/或相关安全编码主题的信息。我们将始终以最谨慎的态度对待您的个人资料,绝不会将其出售给其他公司用于营销目的。

Oopsie daisy