如何在ASP.NET MVC应用程序中强制密码检查延迟?

时间:2011-07-30 06:54:46

标签: c# asp.net asp.net-mvc

我希望我的Web应用程序的所有登录尝试都花费不少于1秒,以使暴力攻击不太可行。如果我在我的代码中添加这样的内容:

Thread.Sleep(1000)

我希望我能够受到非常简单的ddos攻击:只需向网站发出几十个登录请求,就会发生线程池饥饿。 (我不相信Thread.Sleep会将线程返回给线程池,是吗?)

实现此功能的正确方法是什么?

2 个答案:

答案 0 :(得分:5)

你可以做什么而不是睡觉线程(你担心饥饿是正确的)是根据给定用户名的登录尝试失败而设置一个滑动窗口。如果滑动窗口尚未过去,您可以将其存储在内存缓存中并忽略该用户名的登录尝试。

这里有一篇关于可能的实现的博客文章:

Brute Force Protect Your Website

答案 1 :(得分:3)

如果你想使暴力攻击不太可行,你为什么不在对同一个帐户进行3次错误登录尝试之后实施锁定(强制重置密码)而没有干预正确的登录?

如果您需要DDOS保护,我会单独处理 - 很可能在流量到达您的Web服务器之前使用。这真的取决于你是否

我不知道是否有一种简单的方法可以在ASP.NET中异步延迟响应。我希望通过C#5和.NET 5中的异步内容,您将能够返回Task<ActionResult>,此时您将能够编写如下内容:

await Task.Delay(1000);