c# - 多次登录失败后阻止请求

标签 c# asp.net security bots

我想阻止来自试图暴力登录我网站的机器人的请求。

我正在使用 Session 来存储登录尝试,并在三次登录失败后显示验证码。但是,问题是一旦用户关闭浏览器,Session 就会被删除。

我应该考虑什么样的解决方案来防止机器人和暴力登录尝试?我应该使用用户系统或浏览器的什么属性来管理他/她的下一次登录?

注意:我不使用 ASP.NET 成员资格提供程序。我正在使用自己的身份验证和授权类。

最佳答案

您不能使用 session ,因为它需要客户端为您存储一个 cookie,而攻击者不会帮助您。您将需要一些全局状态。

您不必费心跟踪 IP 地址,因为坏人只会使用匿名代理。

不要使用帐户锁定,除非您必须(PCI 要求),因为这只会让攻击者对您的用户进行 DoS。

您还希望通过让您的服务器做太多工作来避免对自己进行 DoS 攻击。

这个有效:

如果身份验证不成功,将用户名和计数一起存储在全局状态中。如果使用该用户名进行更多不成功的身份验证,则同步 count++。为此,我使用了 Redis。

如果 count >= threshold,则要求在继续之前解决 CAPTCHA 值。在登录屏幕上显示验证码。

成功 身份验证后,清除全局状态中存储的用户名。给用户“受信任的用户代理” HMAC'd cookie ,因此他们将来不必为该 UA 上的该用户名进行验证码。

您可以对密码执行相同的操作,但阈值可能更高。

如果您不喜欢 CAPTCHA,则需要工作量证明,例如让客户计算并提交一个非常大的数的质因数。

当您使用它时,请确保您正在使用 bcrypt 来散列您的密码,并且成本因素足够高以致于 >= 250 毫秒来散列密码。这会减慢您的服务器速度,但也会减慢攻击者的速度。除非他们通过验证码(如果需要),否则避免散列。

鼓励用户使用长的、复杂的、令人难忘的?密码,这样它们就更难被暴力破解。

关于c# - 多次登录失败后阻止请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30369529/

相关文章:

java - 执行命令后客户端应用程序应采取什么操作?

c# - 为什么我的菜单(无序列表)没有出现?包含 Menu.css

c# - OLEDB 安全异常

iphone - 是否有可能愚弄越狱的iPhone上的应用程序并进行虚假的inapp购买

c# - 如何从列表的每个元素中提取(在 C# 中)特定属性,并获得这些属性的新列表?

c# - .net 4.5 是对 4.0 的重大升级还是只是包含更新 .dll 的问题?

c# - 使用 LINQ 查询数据表

c# - 找到句子中单词的所有排列

Facebook 图片 URL - 如何防止未经授权的用户访问它们?

c - 导致安全漏洞的缓冲区溢出示例