新在Symfo欧宝娱乐app下载地址ny 5.2:速度限制器组件
2020年10月14日·发表的哈维尔Eguiluz
警告:这篇文章是关于一个不受支持的Symfony的版本。欧宝娱乐app下载地址其中一些信息可能是过时了。阅读最近的Symfony文档欧宝娱乐app下载地址。
“速度限制器”控制某些事件的频率(例如,HTTP请求或登录尝试)允许发生。速度限制是常用的一种防御性措施,以防止过度使用服务。
欧宝娱乐app下载地址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分钟”
现在,注入速率限制器在你的控制器或服务和使用它来检查是否应该允许请求:
1 2 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名称空间应用程序\控制器;使用欧宝娱乐app下载地址\包\FrameworkBundle\控制器\AbstractController;使用欧宝娱乐app下载地址\组件\HttpKernel\异常\TooManyRequestsHttpException;使用欧宝娱乐app下载地址\组件\RateLimiter\限幅器;类ApiController扩展AbstractController{/ /变量名必须是:“速度限制器名称”+“限幅器”后缀公共函数指数(限幅器美元anonymousApiLimiter){/ /创建一个基于客户机的IP地址限制器/ /(您也可以使用用户名/电子邮件,一个API密匙,等等)。美元限幅器=美元anonymousApiLimiter- >创建(美元请求- >getClientIp ());/ /尝试消耗资源;如果接受,服务请求/ /否则,返回一个429错误(太多的请求)如果(假= = =美元限幅器- >消费()- >isAccepted ()) {扔新TooManyRequestsHttpException ();}/ /……}/ /……}
就是这样!RateLimiter组件实现了许多其他功能,并提供两种不同的策略来控制限制:“固定窗”和“令牌桶”。阅读RateLimiter文档学习所有关于其特性。
发表在#生活在边缘
评论
评论都关门了。
以确保评论保持相关,他们关闭了旧的帖子。
有一件事我想添加:根据工具的数量,使用Symfony的RateLimiter执行API的限制/蛮力生产可能不是最好的主意。欧宝娱乐app下载地址你还总是从一个PHP的性能损失过程,Symfony内核引导等。欧宝娱乐app下载地址
如果可能的话,管理这样的关键限制PHP过程(例如Nginx配置,Cloudfire帐户或使用AWS请求节流)。欧宝体育应用最新版app下载
我认为这是一个错误的例子。
变量$限幅器创建,但不得使用,我们使用anonymousApiLimiter验证。
在文档中,美元欧宝体育电话的限幅器使用验证。
Javier Eguiluz is a certified Symfony engineer.
Get certified! Online exams available in all countries.
Register Now