当前位置:  开发笔记 > 开放平台 > 正文

防止网站上的暴力登录

如何解决《防止网站上的暴力登录》经验,为你挑选了6个好方法。

作为对最近的Twitter劫持和Jeff关于字典攻击的帖子的回应,保护您的网站免受暴力登录攻击的最佳方法是什么?

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

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

思考?建议?



1> krosenvold..:

我认为给定帐户(1-5分钟)的数据库持久的短暂锁定期是处理此问题的唯一方法.userid数据库中的每个都包含一个timeOfLastFailedLoginnumberOfFailedAttempts.当numbeOfFailedAttempts > X你锁定对于一些分钟.

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

在亚洲至少有一个国家是NAT,所以IP不能用于任何事情.


@Kibbe但是你可以被僵尸网络攻击,只想锁定你的所有用户.就个人而言,我认为任何永久性锁定都不是好事.您当然可以检测到您受到攻击并改变整个网站的行为
通过创建一个运行cronjob脚本的可能的DoS,该脚本每3/4分钟运行一次,并发送正确的用户名和错误的密码x次。这将完全锁定正确的用户...(哎呀,您刚刚看到的主题是2009年提出的,请在此处保留注释,因为它非常有用)。

2> bl4ckb0l7..:

在我看来,有几种可能性,每种都有缺点和优点:

强制安全密码

:会阻止字典攻击

Con:也会阻止流行,因为大多数用户都无法记住复杂的密码,即使你向他们解释,如何轻松记住它们.例如,通过记住句子:"我在购物中心买了1个Apple for 5 Cent"导致"Ib1Af5CitM".

几次尝试后锁定

Pro:会减慢自动化测试速度

Con:很容易锁定第三方用户

Con:让它们在数据库中持久化可能会导致很多写入流程在Twitter或可比较等巨大的服务中.

验证码

:他们阻止自动化测试

Con:他们正在消耗计算时间

Con:将"减慢"用户体验

巨大的CON:它们不是无障碍的

简单的知识检查

:会阻止自动化测试

骗局:"简单"是旁观者的眼睛.

Con:将"减慢"用户体验

不同的登录和用户名

:这是一种技术,很难看到,但在我看来,这是防止蛮力攻击的良好开端.

Con:取决于用户对两个名称的选择.

使用整个句子作为密码

Pro:增加可搜索空间的大小.

专业版:大多数用户都更容易记住.

Con:取决于用户的选择.

正如您所看到的,"好"解决方案都取决于用户的选择,这再次将用户视为链中最薄弱的元素.

还有其他建议吗?


回复:"不同的登录名和用户名" - 如果您允许使用"用户名"+"密码"登录并且用户"用户名"是公开的(例如显示为评论)那么您已经给了一个黑客1件2件拼图.他们现在知道"用户名",他们只需要破解"密码".如果您的用户"电子邮件"信息不公开,您最好只支持"电子邮件"+"密码"登录.

3> Donny V...:

你可以做谷歌做的事情.经过一定数量的尝试,他们有一个captacha出现.与使用captacha几次之后,你将它们锁定几分钟.



4> inxilpro..:

我倾向于同意大多数其他评论:

X密码尝试失败后锁定

计算对用户名的失败尝试

可选择使用CAPTCHA(例如,尝试1-2是正常的,尝试3-5是CAPTCHA,进一步尝试阻止15分钟).

(可选)向帐户所有者发送电子邮件以删除该块

我想要指出的是,你应该非常小心强制使用"强"密码,因为这通常意味着它们只能写在桌面上的帖子上/连接到显示器上.此外,某些密码策略会导致可预测的密码.例如:

如果密码不能是以前使用过的任何密码并且必须包含一个数字,那么它很可能是一个带有序号的常用密码.如果你必须每6个月更改一次密码,并且一个人已经在那里呆了两年,那么他们的密码很可能就像密码4.

假设您更加限制它:必须至少8个字符,不能有任何连续的字母,必须有一个字母,一个数字和一个特殊字符(这是许多人认为安全的真实密码策略).试图闯入John Quincy Smith的账户?知道他出生在3月6日吗?他的密码很可能像jqs0306!(或者也许是jqs0306~).

现在,我并不是说让用户拥有密码密码也不是一个好主意,只是不要自欺欺人地认为你的强制"安全"密码是安全的.


这完全取决于熵,而不是长度,是否有特殊字符等.像"Password1!"这样的密码可能符合"安全"密码的指导,但是有一半像我的超级安全密码那样的熵. ,这些指导原则不允许这样做.

5> Jens Roland..:

详细说明最佳做法:

krosenvold说的是:在用户表中记录num_failed_logins和last_failed_time(用户被暂停时除外),一旦登录失败次数达到阈值,您将暂停用户30秒或一分钟.这是最好的做法.

该方法有效地消除了单一帐户暴力破解和字典攻击.但是,它不会阻止攻击者在用户名之间切换 - 即.保持密码修复并尝试使用大量用户名.如果您的网站有足够的用户,那么这种类型的攻击可以持续很长时间,然后才能用完未被删除的帐户.希望他能从一个IP运行这种攻击(不太可能,因为僵尸网络现在真的成为交易的工具)所以你可以检测到并阻止IP,但如果他正在分发攻击......好吧,这是另一个问题(我刚刚在这里发布,所以如果你没有,请检查一下).

关于最初想法的另一个要记住的事情是,你当然应该试图让合法用户通过,即使在帐户遭到攻击和暂停时 - 也就是说,如果你可以告诉真实用户和机器人.

你可以,至少有两种方式.

    如果用户有持久登录("记住我")cookie,那就让他通过.

    当您显示"对不起,您的帐户由于大量不成功的登录尝试而被暂停"消息时,请包含一个链接,上面写着" 安全备份登录 - 仅限人们(机器人:没有说谎) ".除了笑话,当他们点击该链接时,给他们一个reCAPTCHA认证的登录表单,绕过帐户的暂停状态.这样,如果他们是人类并且知道正确的登录+密码(并且能够读取CAPTCHA),他们将永远不会受到延迟的困扰,并且您的站点将不受快速攻击的影响.

唯一的缺点:有些人(如视力受损者)无法读取CAPTCHA,如果他们没有使用自动登录功能,他们可能仍会受到烦人的僵尸制造延迟的影响.

什么不是缺点:自动登录cookie没有内置的类似安全措施.你问,为什么这不是一个缺点?因为只要你明智地实现它,你的登录cookie中的安全令牌(密码等效物)就是你的密码的两倍(哎呀,就是这个数量的十倍!),所以蛮力强迫它实际上是一个非问题.但是,如果你真的是偏执狂,那么在自动登录功能上设置一秒钟的延迟,只是为了好的措施.



6> Einstein..:

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

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

其次,根据您的应用程序,使用特定于应用程序的延迟对策比将数据存储在DB中要聪明一些。

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

最后,基于IP做出一些决定是可以接受的...如果您看到一次IP尝试一次是一个诚实的错误,而来自IP的多个IP知道您可能想采取其他预防措施或通知最终用户有关的系统数量。阴暗活动。

它真正的大型代理联合会可以保留大量IP地址供其使用,但是大多数联合会确实做了合理的努力将源地址保留一段时间以用于传统目的,因为某些站点习惯将cookie数据绑定到IP。

推荐阅读
k78283381
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有