我需要保护登录吗?

时间:2011-07-13 20:40:28

标签: php mysql captcha

我有登录页面。我需要用Captcha保护它还是我应该如何处理它?

例如,如果人知道用户名,他可以使用curl或其他任何东西并尝试多次猜测密码。它将使用许多MySQL查询,它将占用我的资源。

那么,我应该使用Captcha登录吗?或者也许我应该存储多少次尝试用$ _SESSION猜测密码,如果他猜错了10次密码错误,那么我会显示Captcha?在$ _SESSION中使用这样的信息是否安全?也许我应该允许人们每隔10秒钟进入一次登录$ _SESSION?它会100%安全吗?或者你会建议我什么?

编辑:请在Eljakim的帖子下阅读我的评论。

8 个答案:

答案 0 :(得分:4)

不要选择会话方法。

验证码可能有所帮助,但它会惹恼您的普通用户。

您可能希望在数据库中跟踪已尝试从特定IP地址或(例如)过去10分钟内的特定用户名尝试了多少次无效登录。如果超过特定阈值,只需阻止该用户名或IP地址一段时间。

请勿在会话中执行此操作!攻击者可能不会发送支持会话的cookie,或者只是欺骗它们。

答案 1 :(得分:2)

3件事:

  1. 使用Recaptcha(由谷歌运营)更多信息HERE
  2. 在超时(比如说一两个小时)之前,每小时只允许一定数量(10)的登录尝试来自唯一的IP地址。
  3. 成功登录时设置一个cookie,如果用户有此cookie而不显示常规访问者,则不显示Captcha。
  4. 这将处理所有黑客攻击。根据您的流量以及您收到的黑客攻击次数,您可能希望使用这些数字。

答案 2 :(得分:1)

我个人不会选择Captcha来处理多次失败的登录尝试。相反,您可以在数据库中保留一个计数器,并在每次不成功的登录尝试时递增计数器。当您达到确定的失败次数(5或10或其他)时,您可以在数据库中创建锁定期或十分钟,在此期间您将不接受该用户的登录。

这可以保护您的用户免受密码强制攻击。 $_SESSION在这里不会有效,因为用于暴力破解的工具不太可能接受或尊重会话cookie。

答案 3 :(得分:1)

我是否可以建议添加对sleep()的调用,为登录加载器添加一些额外的挫败感?

即使仅仅两秒钟的睡眠也会累积增加你所描述的蛮力攻击所需的时间。

答案 4 :(得分:0)

不要担心你的mysql查询,但担心用户的密码。每当用户尝试登录(并且失败)时将行插入DB,并且每当他/她尝试再次登录时选择这些行)如果登录尝试> 5 - >限制登录

答案 5 :(得分:0)

您可以在此处拥有多个安全层。一种选择是每X分钟仅允许5次登录尝试。这将阻止大多数蛮力。 (您也可以通过IP或其他任何方式禁止已知的暴力破坏者)添加CAPTCHA显然会更有帮助。然而,经过多次错误尝试后,只需使用PHP的一些图像功能显示模糊的图像。您添加的功能越多,越安全。请注意,CAPTCHA对许多合法用户来说都很麻烦。

答案 6 :(得分:0)

在$ _SESSION中存储try-count并不安全。如果我不接受您的bruteforce-script中的cookie,我将为每个请求获得一个新会话。

如果您正在尝试阻止任何类型的DOS攻击:将每个IP请求的数量限制为每个时间间隔的足够数量。

如果您只是想阻止暴力破解密码:使用验证码或存储数据库中失败登录的计数。 (也许在3次失败后尝试阻止用户一小时左右?)

答案 7 :(得分:0)

我总是选择两个选项中的一个,或者像三个密码失败的密码,然后通过电子邮件向用户发送新密码。 或者,具有2 ^的冷却周期(登录失败 - 5) - 将非常快地给出巨大的延迟。 IE浏览器。 7失败将给予2 ^(7-5)= 4秒延迟aso。

相关问题