Symfonyob娱乐下载 5.2中的新功能:速率限制器组件
2020年10月14日·发表的哈维尔Eguiluz
警告:这篇文章是关于一个不受支持的Symfony版本。ob娱乐下载有些信息可能已经过时了。阅读最新的Symfony文档ob娱乐下载.
“速率限制器”控制某些事件(例如HTTP请求或登录尝试)允许发生的频率。速率限制通常被用作一种防御措施,以保护服务不被过度使用。
ob娱乐下载Symfony 5.2引入了一个新的RateLimiter组件因此,您可以将这些保护添加到您自己的应用程序中。例如,假设您希望在匿名使用时将与GitHub相同的限制应用于您自己的api:每小时60个请求,并通过原始IP地址识别请求。
首先,配置一个新的速率限制器,如下所示:
1 2 3 4 5 6 7
#配置/包/ rate_limiter.yaml框架:rate_limiter:anonymous_api:策略:fixed_window限制:60间隔:“60分钟”
现在,在你的控制器或服务中注入速率限制器,并使用它来检查请求是否应该被允许:
12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
/ / src /控制器/ ApiController.php名称空间应用程序\控制器;使用ob娱乐下载\包\FrameworkBundle\控制器\AbstractController;使用ob娱乐下载\组件\HttpKernel\异常\TooManyRequestsHttpException;使用ob娱乐下载\组件\RateLimiter\限幅器;类ApiController扩展AbstractController{//变量名必须为:“速率限制器名称”+“限制器”后缀公共函数指数(限幅器$anonymousApiLimiter){//创建一个基于客户端IP地址的限制器//(您也可以使用用户名/电子邮件,API密钥等)$限幅器=$anonymousApiLimiter->创建($请求->getClientIp ());//尝试消耗资源;如果它被接受了,就发送请求//否则,返回429(太多请求)错误如果(假===$限幅器->消费()->isAccepted ()) {扔新TooManyRequestsHttpException ();}/ /……}/ /……}
就是这样!RateLimiter组件实现了许多其他特性,并提供了两种不同的策略来控制限制:“固定窗口”和“令牌桶”。阅读RateLimiter文档去了解它的所有特征。
发表在#生活在边缘
评论
评论截止。
为了确保评论保持相关性,旧帖子将被关闭。
我想补充的一点是:根据可用工具的数量,使用Symfony的RateLimiter来强制API限制/暴力生产可能不是最好的主意。ob娱乐下载在启动PHP进程、启动Symfony内核等方面,您仍然会受到性能损失。ob娱乐下载
如果可能的话,在PHP进程之前管理这些关键限制(例如在你的Nginx配置中,你的Cloudfire帐户或使用AWS请求节流)。ob直播app
我认为这个例子有一个错误。
变量$ limititer被创建但未被使用,我们使用anonymousApiLimiter进行验证。
在文档中,它是欧宝官网下载app用于验证的$限制器。
Javier Eguiluz is a certified Symfony engineer.
Get certified! Online exams available in all countries.
Register Now