Dea*_*unt 2 c# asp.net multithreading locking
我有一个密码页面,当有人输入错误的密码时,我想简单地挫败蛮力攻击
bool isGoodPassword = (password == expected_password);
lock (this)
{
if (!isGoodPassword)
Thread.Sleep(2000);
}
Run Code Online (Sandbox Code Playgroud)
我希望这将允许所有正确的密码而不会停止,但如果一个用户输入错误的密码,另一个用户的另一个成功密码也将被阻止.但是,锁似乎不是lock跨ASP.NET线程.没有意义.
Jon*_*eet 16
好吧,你没有显示"这个"是什么,但是如果你在一个页面的上下文中......每个请求都会得到它自己的页面实例,不是吗?否则他们首先会有不同的密码?你将有几个线程,每个线程都锁定一个单独的对象.
在许多方面,这是一个很好的事情:你不希望真正的用户被攻击者affeted做.另一方面,这意味着攻击者只需要并行进行多次尝试,以便有效地忽略你欺骗他的企图.正如其他答案所述,您可以通过使用单个对象来解决这个问题 - 但请不要.不要忘记IIS不会无限制地创建新线程:这种方法会让单个攻击者让整个应用程序无法用于所有用户,而不仅仅是用于身份验证,而是整个应用程序......他们甚至都不会需要有一个有效的密码.
相反,您可能希望考虑记录认证失败的IP地址,并限制您愿意以这种方式处理的请求数量.(不可否认,如果某些用户与攻击者在同一个代理服务器后面,可能会遇到问题,但不太可能.)这不会阻止分布式攻击,但这是一个良好的开端.
| 归档时间: |
|
| 查看次数: |
1734 次 |
| 最近记录: |