Security 防止网站暴力登录

Security 防止网站暴力登录,security,login,brute-force,Security,Login,Brute Force,作为对最近和最近的事件的回应,保护您的网站免受暴力登录攻击的最佳方法是什么 Jeff的帖子建议每次尝试登录都要增加延迟,评论中的建议是在第二次尝试失败后添加验证码 这两个似乎都是好主意,但你怎么知道“尝试次数”是多少呢?您不能依赖会话ID(因为攻击者每次都可以更改它)或IP地址(更好,但易受僵尸网络攻击)。只需根据用户名登录,就可以使用延迟方法锁定合法用户(或者至少让他们的登录过程非常缓慢) 想法?建议?我认为对于给定的帐户,数据库保持较短的锁定期(1-5分钟)是处理此问题的唯一方法。数据库中的

作为对最近和最近的事件的回应,保护您的网站免受暴力登录攻击的最佳方法是什么

Jeff的帖子建议每次尝试登录都要增加延迟,评论中的建议是在第二次尝试失败后添加验证码

这两个似乎都是好主意,但你怎么知道“尝试次数”是多少呢?您不能依赖会话ID(因为攻击者每次都可以更改它)或IP地址(更好,但易受僵尸网络攻击)。只需根据用户名登录,就可以使用延迟方法锁定合法用户(或者至少让他们的登录过程非常缓慢)


想法?建议?

我认为对于给定的帐户,数据库保持较短的锁定期(1-5分钟)是处理此问题的唯一方法。数据库中的每个
userid
都包含一个
LastFailedLogin的时间
numberOfFailedAttempts
。当
numberoffailedattempts>X
锁定几分钟

这意味着您正在锁定有问题的
用户ID
一段时间,但不是永久锁定。这还意味着您正在为每次登录尝试更新数据库(当然,除非它被锁定),这可能会导致其他问题


亚洲至少有一个国家是NAT'ed,因此IP不能用于任何用途。

我认为您应该重新登录用户名。这是唯一的常量(其他任何东西都可能被欺骗)。是的,它可以将合法用户锁定一天。但如果我必须在被黑客入侵的账户和被关闭的账户(一天)之间做出选择,我肯定会选择锁


顺便说一下,在第三次尝试失败后(在一定时间内),您可以锁定帐户并向所有者发送释放邮件。邮件中包含一个用于解锁帐户的链接。这对用户来说是一个轻微的负担,但是破解程序被阻止了。而且,即使邮件帐户被黑客攻击,你也可以设置每天解锁次数的限制。

像大多数银行一样,在X登录失败后锁定用户名/帐户。但我不会像银行那样严格,因为你必须打电话来解锁你的账户。我会临时锁定1-5分钟。当然,除非web应用程序与银行一样对数据敏感。:)

您可以添加某种形式的验证码测试。但要小心,它们中的大多数会使眼睛或耳朵受损的人更难接近。验证码的一种有趣形式是提问

2和2的和是多少


如果您记录了最后一次登录失败,您可以跳过验证码(如果验证码足够大)。只有在最后一次失败发生在最后10分钟内时,才进行验证码测试。

我在线登录的许多在线留言板给我5次登录帐户的尝试,在这5次尝试后,帐户被锁定1小时或15分钟。这可能不太好,但这肯定会减缓字典攻击的速度。现在,没有什么可以阻止同时对多个帐户的字典攻击。Ie尝试5次,切换到其他帐户,再尝试5次,然后返回。但它确实减慢了攻击速度


防止字典攻击的最好方法是确保密码不在字典中!!!基本上设置某种密码策略,根据字母检查字典,并要求密码中包含数字或符号。这可能是防止字典攻击的最佳方法。

为此,应在应用程序中实现与后端数据库无关的缓存

首先也是最重要的是,仅延迟合法用户名会导致您大量“放弃”您的有效客户群,这本身就是一个问题,即使用户名不是一个严格保密的秘密

第二,根据应用程序的不同,使用特定于应用程序的延迟对策可能比在数据库中存储数据要聪明一些

它可以抵抗将DOS条件泄漏到后端数据库的高速尝试

最后,基于IP协议做出一些决策是可以接受的。。。如果您看到来自一个IP的单个尝试,很可能是一个诚实的错误,而来自上帝知道您可能需要采取其他预防措施或将可疑活动通知最终用户的多个IP


其真正的大型代理联合会可以保留大量IP地址供其使用,但大多数都会做出合理的努力,在一段时间内维护您的源地址以用于遗留用途,因为有些站点有将cookie数据绑定到IP的习惯。

在我看来,有几种可能性,每种都有利弊:

强制使用安全密码
  • Pro:将防止字典攻击
  • Con:也会阻止流行,因为大多数用户无法记住复杂的密码,即使你向他们解释如何轻松记住密码。例如,通过记住以下句子:“我在商场花5美分买了一个苹果”就引出了“Ib1Af5CitM”
几次尝试后的封锁
  • Pro:将减慢自动测试的速度
  • Con:很容易锁定第三方用户
  • Con:将它们持久化到数据库中可能会导致在Twitter或类似的大型服务中产生大量的写入过程
验证码
  • Pro:它们阻止自动测试
  • Con:他们正在消耗计算时间
  • Con:将“减慢”用户体验
  • 巨大的障碍:它们不是无障碍的
简单的知识检查
  • Pro:将阻止自动测试
  • Con:“简单”在旁观者的眼里
  • Con:将“减慢”用户体验
不同的登录名和用户名
$_SESSION['loginFail'] = 10; // any number you prefer
unset($_SESSION['loginFail']); // put it after create login session
$_SESSION['loginFail']-- ; // reduce 1 for every error
if (!isset($_SESSION['loginFail'])) { 

     if ($_SESSION['login_fail'] < 1 ) {

     header('Location:https://google.com/'); // or any web page

     exit();

}
}