什么是最好的方式来实施速度限制算法网的请求?
-
11-09-2019 - |
题
可能局部重复:
我正在寻找更好的方式来实施一个移动的时间窗率限制算法网应用程序,以减少垃圾邮件或暴力攻击。
使用的例子就是"最大数目的登录失败的尝试从一定的知识产权在最后5分钟","最大数量的(员额/选民/etc...)在最后N分钟"。
我会更喜欢使用的一个移动的时间窗口的算法,而不是一个难重的统计数据每隔X分钟(如twitter api)。
这将是一C#/ASP。净的应用程序。
解决方案
使用快速存储器基hashtable喜欢 缓存.钥匙会的目标是限制性的(例如IP)和到期的每个储存价值应最大限的时间。
值储存的每一个关键将包含一个化名单的最后N次尝试它们在执行行动,随着时间为每次尝试。
其他提示
我们发现了 令牌桶 是更好的算法为这种速度限制。这是广泛使用路由器/交换机,使我们的操作的人们更加熟悉这一概念。
只是添加了更多的"现代"回答这个问题:为。净(#), WebApiThrottle 是优秀的和可能做你想要的一切。
它也是 可在NuGet.
执行只需要一分钟左右,它的高度自定义:
config.MessageHandlers.Add(new ThrottlingHandler()
{
Policy = new ThrottlePolicy(perSecond: 1, perMinute: 30, perHour: 500, perDay:2000)
{
IpThrottling = true,
ClientThrottling = true,
EndpointThrottling = true
},
Repository = new CacheRepository()
});
你找到这个页面是一个有趣的读:
http://www.codeproject.com/KB/aspnet/10ASPNetPerformance.aspx
该部分要寻找启动如下:
防止拒绝服务(DOS)攻击
网络服务是最具有吸引力的目标黑客,因为甚至一个学龄前学校的黑客可以降低服务器的一再呼叫一个网服务不昂贵的工作。
编辑:类似的问题:
我只是增加问题的答案 框API请求为5分钟如果API率限制超过。
我用 HttpRuntime.Cache
只允许60请求每分钟。超过限制将阻止API for接下来的5分钟。
不隶属于 StackOverflow