我正在为我的Laravel应用程序的用户构建一个宁静的API,以检索他们的数据。
当前计划是,他们可以在应用程序内生成API令牌,然后对他们的API请求进行身份验证。我不知道他们将从哪里发出请求。
我要实施速率限制的主要原因是为了减少意外/故意DDOS的影响,以及减少用户当前订阅包的一部分(必要)。由于后者,不同的用户可能具有不同的费率。
Laravel已经提供了内置的速率限制器,包括访问User表中指定的动态用户限制。
我想知道会话的处理方式。从我可以看到,Laravel TokenGuard类不会在请求之间存储用户。因此,在每个请求之间都会检索用户,甚至是检索速率限制。如果我们仍然每次都在进行数据库查询,这似乎使速率限制器失去了作用。
处理此问题的适当方法是什么?
如果我编写自己的身份验证中间件并将用户存储在会话中,那行得通吗?从其他服务器(而不是浏览器)发送的请求是否可以处理会话?
谢谢。
答案 0 :(得分:0)
每次有人访问您的网站时,您都在旋转整个Laravel实例,这已经使您的服务器承受压力。 DDOS不仅取决于使数据库陷入困境。如果有人确定要使用DDOS,那么您会发现!您所能做的就是减轻问题,因此不必太担心每个请求都具有关联的数据库调用。
您可以进行本地会话,但是从长远来看,这是一个糟糕的设计决策,因为它将状态引入到您的服务器中,这将使将来的扩展变得更加困难。 ({https://12factor.net/以获得更多信息。)这就是Laravel改用存储在数据库中的用户的原因。
除非您正在做一些非常特别的事情,否则通常可以安全地假设Laravel使用了适当的解决方案。它们具有框架,因此您可以担心业务逻辑!
最后,那里有很多网站。机会是,当您足够大时,会吸引尝试使用DDOS的人们的注意(记住,这需要资源,因此也要花钱),您可能会使用更加复杂的系统。
答案 1 :(得分:0)
如果带有某种令牌的请求到达您的应用程序,则您不需要任何会话。如您所料:会话通常通过cookie处理,但是原始的HTTP调用(例如cURL这样做)通常不使用它们。
不要高估从数据库中获取当前用户的成本-如果您的应用程序执行更多操作,则这些其他操作将有所作为!与其他所有对象相比,从数据库中获取一个实体是相当便宜的,并且要检查适当的权限和速率限制,这显然是必要的。
其他所有内容似乎都在寻找Laravel Passport之类的东西(请参见https://laravel.com/docs/5.7/passport)。 Throttle程序包之类的其他工具(请参见https://github.com/GrahamCampbell/Laravel-Throttle)将帮助您启用路线的速率限制