可能的/部分重复:
- 什么是一个很好的限速算法?
- 节流方法调用在N秒中号请求
- 在ASP.NET中实现MVC请求限制的最佳方式?
我要寻找实现移动时间窗口限速算法的web应用程序,以减少垃圾邮件或蛮力攻击的最佳方法。
使用的例子将是“最后N分钟的最大数量(文章/票/等)”,“从给定的IP在最后5分钟登录失败的最大数目”。
我更喜欢使用移动时间窗算法,而不是统计每隔X分钟(如Twitter API)的硬复位。
这将是一个C#/ ASP.Net应用程序。
可能的/部分重复:
我要寻找实现移动时间窗口限速算法的web应用程序,以减少垃圾邮件或蛮力攻击的最佳方法。
使用的例子将是“最后N分钟的最大数量(文章/票/等)”,“从给定的IP在最后5分钟登录失败的最大数目”。
我更喜欢使用移动时间窗算法,而不是统计每隔X分钟(如Twitter API)的硬复位。
这将是一个C#/ ASP.Net应用程序。
使用快速的基于内存的散列表类似memcached的 。 该密钥将就会限制(例如,IP),并且每个存储值到期应该是最大限制时间目标。
存储每个键的值将包含在他们表演动作,随着时间的每次尝试沿着做出最后的N次尝试的序列化列表。
我们发现令牌桶是这种限速的更好的算法。 它广泛应用在路由器/交换机所以我们的操作人都比较熟悉的概念。
只是为了更“现代”的回答到这个问题:对于.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()
});
你会发现这个页面是一个有趣的阅读:
http://www.codeproject.com/KB/aspnet/10ASPNetPerformance.aspx
本节看出来的开始,如下所示:
服务的防止拒绝(DoS)攻击
Web服务是黑客最有吸引力的目标,因为即使是学前教育黑客可以通过重复调用它确实昂贵的工作Web服务打倒的服务器。
编辑:这类似的问题:
在ASP.NET中实现MVC请求限制的最佳方式?
我只是说了问题的答案了,如果API速率限制超过5分钟块API请求。
我用HttpRuntime.Cache
允许每分钟只有60个请求。 超过限制会阻止对接下来的5分钟的API。