什么是执行的Web请求的限速算法的最佳方式?(What is the best way to imp

2019-07-18 16:05发布

可能的/部分重复:

  • 什么是一个很好的限速算法?
  • 节流方法调用在N秒中号请求
  • 在ASP.NET中实现MVC请求限制的最佳方式?

我要寻找实现移动时间窗口限速算法的web应用程序,以减少垃圾邮件或蛮力攻击的最佳方法。

使用的例子将是“最后N分钟的最大数量(文章/票/等)”,“从给定的IP在最后5分钟登录失败的最大数目”。

我更喜欢使用移动时间窗算法,而不是统计每隔X分钟(如Twitter API)的硬复位。

这将是一个C#/ ASP.Net应用程序。

Answer 1:

使用快速的基于内存的散列表类似memcached的 。 该密钥将就会限制(例如,IP),并且每个存储值到期应该是最大限制时间目标。

存储每个键的值将包含在他们表演动作,随着时间的每次尝试沿着做出最后的N次尝试的序列化列表。



Answer 2:

我们发现令牌桶是这种限速的更好的算法。 它广泛应用在路由器/交换机所以我们的操作人都比较熟悉的概念。



Answer 3:

只是为了更“现代”的回答到这个问题:对于.NET的WebAPI, 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()
});


Answer 4:

你会发现这个页面是一个有趣的阅读:

http://www.codeproject.com/KB/aspnet/10ASPNetPerformance.aspx

本节看出来的开始,如下所示:

服务的防止拒绝(DoS)攻击

Web服务是黑客最有吸引力的目标,因为即使是学前教育黑客可以通过重复调用它确实昂贵的工作Web服务打倒的服务器。

编辑:这类似的问题:

在ASP.NET中实现MVC请求限制的最佳方式?



Answer 5:

我只是说了问题的答案了,如果API速率限制超过5分钟块API请求。
我用HttpRuntime.Cache允许每分钟只有60个请求。 超过限制会阻止对接下来的5分钟的API。



文章来源: What is the best way to implement a rate-limiting algorithm for web requests?