我希望我的Web应用程序的所有登录尝试都花费不少于1秒,以使暴力攻击不太可行。如果我在我的代码中添加这样的内容:
Thread.Sleep(1000)
我希望我能够受到非常简单的ddos攻击:只需向网站发出几十个登录请求,就会发生线程池饥饿。 (我不相信Thread.Sleep会将线程返回给线程池,是吗?)
实现此功能的正确方法是什么?
答案 0 :(得分:5)
你可以做什么而不是睡觉线程(你担心饥饿是正确的)是根据给定用户名的登录尝试失败而设置一个滑动窗口。如果滑动窗口尚未过去,您可以将其存储在内存缓存中并忽略该用户名的登录尝试。
这里有一篇关于可能的实现的博客文章:
答案 1 :(得分:3)
如果你想使暴力攻击不太可行,你为什么不在对同一个帐户进行3次错误登录尝试之后实施锁定(强制重置密码)而没有干预正确的登录?
如果您需要DDOS保护,我会单独处理 - 很可能在流量到达您的Web服务器之前使用。这真的取决于你是否
我不知道是否有一种简单的方法可以在ASP.NET中异步延迟响应。我希望通过C#5和.NET 5中的异步内容,您将能够返回Task<ActionResult>
,此时您将能够编写如下内容:
await Task.Delay(1000);