【问题标题】:Laravel rate limiting API authenticated with API Token使用 API Token 认证的 Laravel 限速 API
【发布时间】:2019-06-22 10:19:08
【问题描述】:

我正在为我的 Laravel 应用程序的用户构建一个 restful API 来检索他们的数据。

目前的计划是他们可以在应用程序中生成一个 API 令牌,然后对他们的 API 请求进行身份验证。我不知道他们会从哪里提出请求。

我要实施速率限制的主要原因是减少意外/故意 DDOS 的影响,以及用户当前订阅包的一部分(必要)。由于后者,不同的用户可能有不同的费率。

Laravel 已经提供了一个内置的速率限制器,包括访问 User 表中指定的动态用户限制。

我想知道会话是如何处理的。从我所见,Laravel TokenGuard 类不会在请求之间存储用户。因此,在每个请求之间都会检索用户,甚至检索速率限制。如果我们仍然每次都进行数据库查询,这似乎破坏了速率限制器的意义。

处理这个问题的适当方法是什么?

如果我编写自己的身份验证中间件,并将用户存储在会话中,那会起作用吗?从另一台服务器(不是浏览器)发送的请求是否会处理会话?

谢谢。

【问题讨论】:

  • Laravel rateLimit 如果请求数量超过限制数量,则不要关注用户对应用程序的请求,所有用户拒绝访问任何前缀中有 Api 的路由

标签: php laravel restful-authentication rate-limiting throttling


【解决方案1】:

如果带有某种令牌的请求到达您的应用程序,您应该不需要任何类型的会话。正如您所假设的:会话通常通过 cookie 处理,但原始 HTTP 调用(就像 cURL 一样)通常不使用它们。

不要高估从数据库中获取当前用户的成本 - 如果您的应用程序执行更多操作,这些额外操作将产生影响!与其他一切相比,从数据库中获取一个实体相当便宜,而且要检查适当的权限和速率限制,这显然是必要的。

其他所有东西看起来都像是在寻找 Laravel Passport 之类的东西(请参阅 https://laravel.com/docs/5.7/passport)。 Throttle 包(请参阅https://github.com/GrahamCampbell/Laravel-Throttle)等其他工具将帮助您为您的路线启用速率限制

【讨论】:

    【解决方案2】:

    每次有人访问您的网站时,您都会启动整个 Laravel 实例,这已经给您的服务器带来了压力。 DDOS 不仅仅依赖于困扰您的数据库。如果有人决心对你进行 DDOS,你会注意到的!您所能做的就是缓解问题,因此不必太担心每个请求都有关联的数据库调用。

    您可以有一个本地会话,但从长远来看,这是一个糟糕的设计决策,因为它会将状态引入您的服务器,这将使未来的扩展更加困难。 (https://12factor.net/ 了解更多信息。)这就是 Laravel 使用存储在数据库中的用户的原因。

    除非您正在做一些非常特别的事情,否则通常可以安全地假设 Laravel 使用了适当的解决方案。他们做框架,这样你就可以担心业务逻辑!

    最后,有很多网站。很有可能,当你大到足以吸引尝试 DDOS 的人的注意力时(记住这需要资源,因此也需要金钱),你可能会使用更复杂的系统。

    【讨论】:

      猜你喜欢
      • 2014-03-01
      • 2017-10-05
      • 1970-01-01
      • 2018-05-24
      • 2015-11-05
      • 2019-03-01
      • 1970-01-01
      • 2016-04-27
      • 2021-03-24
      相关资源
      最近更新 更多