在一段时间内阻止多次不成功登录的请求

Ari*_*ian 16 c# asp.net security bots

我有一个网站,我想阻止请求BOTs并尝试暴力登录我的网站.

现在我Session用于存储登录尝试并在3次登录失败后显示验证码但是有问题.如果用户关闭浏览器,将删除.Session.

我应该考虑采取什么样的解决方案来防止BOTs和暴力登录?我应该存储用户系统或浏览器的哪些属性来管理他/她的下次登录?

编辑1)

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

Nei*_*gan 33

您不能使用会话,因为它要求客户端为您存储cookie,并且攻击者不会帮助您.你需要一些全球状态.

您无需费心追踪IP地址,因为坏人只会使用Anonymyzing Proxy.

除非必须(PCI要求),否则不要使用帐户锁定,因为这只是让攻击者DoS您的用户.

您还希望通过使服务器执行太多工作来避免自己操作.

这有效:

验证失败后,将用户名存储在全局状态,并带有计数.count++如果使用该用户名进行更多不成功的身份验证,则会同步 我为此使用redis.

如果count >= threshold,则需要在继续之前解决CAPTCHA值.在登录屏幕上显示CAPTCHA.

一旦成功认证,清除存储的用户名中的全局状态.为用户提供"可信用户代理"HMAC的cookie,以便他们将来不必使用该用户名的CAPTCHA.

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

如果您不喜欢CAPTCHA,则需要工作证明,例如让客户计算并提交非常大数的素因子.

在您使用它的同时,请确保使用bcrypt来对您的密码进行哈希处理,并且成本因子足够高,需要> = 250ms才能对密码进行哈希处理.这会降低服务器速度,但也会降低攻击者的速度.除非它们通过CAPTCHA(如果需要),否则请避免散列.

鼓励用户使用冗长,复杂,令人难忘的?密码,这样他们就更难以暴力破解.

  • 对不成功尝试计数的帐户锁定是最糟糕的"安全"做法之一.实际上是向任何攻击者发放的拒绝服务工具,现在可以锁定合法用户.[你应该锁定**攻击者**而不是**受害者**](http://security.stackexchange.com/a/40764/11713) (5认同)

ABr*_*wne 5

最简单的方法是使用 CDN 提供商(例如 cloudflare ( https://www.cloudflare.com/features-security ))来为您检测机器人,从而为您提供解决方案。许多 CDN 都提供此服务,而 cloudflare 有免费关税。

或者,如果您尝试自己执行此操作,则可以计算数据库中每个用户名的尝试次数,并根据此计数提供验证码。