几次登录失败尝试的操作 - 验证码

时间:2013-05-11 18:20:41

标签: php security class recaptcha login-script

我正在为网站制作登录脚本,我需要一些方向。我担心它的安全性。

涉及到两件事,登录页面和登录类,我按照以下方式管理安全性。

login.php中的表单有一个令牌,当用户提交表单(目标为“php_self”)时,我调用该类并且:

  • 验证令牌
  • 检查用户是否阻止
  • 使用bcrypt检查密码是否正确。
  • 如果登录失败,则在db
  • 中存储该用户上次登录的尝试次数和日期时间
  • 如果是第二次尝试,我将recaptcha放在表单中。验证码通过jquery / ajax验证(出于可用性原因),并在提交后再次在类中验证服务器端(如果有人强制调用ajax)...
  • 如果第5次尝试失败,该帐户将被阻止10分钟。

你看到任何安全漏洞吗?

我找到了一个但不知道如何解决它。

如果失败尝试为“x”并且需要重新接收,则用户可以单击“登录页面”链接(不刷新),并找到没有重新接收的表单(因为尝试为0)。我可以创建一个Session变量“尝试“,但是这个可以和ajax一样强制,对吗?

提前感谢您的帮助

2 个答案:

答案 0 :(得分:2)

我看到的一个安全问题是机器人正在创建随机邮件和密码并且一直登录。由于电子邮件每次都不同,你不知道它的机器人是否相同,它会使你的网络服务器忙碌让它变慢。

解决这个问题:

  1. 您可以随时拥有CAPTCHA
  2. 您可以获取来电者IP并根据IP而非电子邮件强制执行您的规则。当此IP尝试多次时,您可以在防火墙上阻止它。

答案 1 :(得分:1)

这样的方案的最大问题是您阻止(或CAPTCHA)用户而不是IP地址。这会打开一个漏洞并且不会停止暴力破解:

  1. 蛮力机器人可以为每个帐户进行两次猜测而无需任何CAPTCHA或阻止。因此,机器人会在系统上的每个帐户上尝试“密码”和“123456”,并且可能会成功占2%的时间。你想在每个帐户上进行两次猜测之前就停止这个机器人。特别是如果你使用的是在CPU方面相当昂贵的bcrypt。
  2. 恶意恶作剧者可以锁定他们认识电子邮件地址的任何用户,只需尝试每10分钟登录该用户5次。
  3. 请注意,阻止IP地址会带有一组自己的误报和误报。合法的代理服务器和僵尸网络意味着阻止IP地址可能会导致问题。它解决了90%的蛮力问题。

    CAPTCHA也有自己的假阳性和假阴性。我知道我在阅读大量的ReCAPTCHA图像时遇到了麻烦,而且我看到机器人攻击我的系统解决了ReCAPTCHA的问题。除了对我的顾客产生的安慰剂效应外,我不再需要CAPTCHA了。

    你说:

      

    用户可以点击“登录页面”链接(不刷新),找到没有recaptcha的表单(尝试为0)

    这是为什么?如果尝试计数存储在数据库中,为什么单击该链接会更改尝试计数?

    尝试次数是否有自动超时? 成功登录会重置吗?

    如果你实施了那个,暴力机器人甚至可能不会注意到基于会话的阻止。会话基于Cookie,除非您的登录表单需要会话中的内容,否则机器人甚至不会在登录后发送该cookie。即使是必需的,机器人也可以随时通过不发送cookie来获取新的,未阻止的会话cookie。

相关问题