1

我正在为一个网站编写登录脚本,我需要一些指导。我担心它的安全性..

涉及两件事,登录页面和登录类,我管理安全性如下..

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

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

您是否发现任何安全漏洞?

我找到了一个,不知道如何修复它。

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

在此先感谢您的帮助

4

2 回答 2

2

我看到的一个安全问题是当机器人创建随机邮件和密码并继续登录时。由于电子邮件每次都不同,你不知道它是同一个“机器人”,它会让你的网络服务器忙碌并让它变慢.

要解决这个问题:

  1. 您可以随时拥有 CAPTCHA
  2. 您可以获取呼叫者 IP 并根据 IP(而不是电子邮件)执行您的规则。当此 IP 尝试多次时,您可以在防火墙上阻止它。
于 2013-05-12T05:49:43.960 回答
1

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

  1. 蛮力机器人可以对每个帐户进行两次猜测,而无需任何验证码或阻止。因此,机器人会在您系统上的每个帐户上尝试“密码”和“123456”,并且可能有 2% 的时间成功。您想在这个机器人对每个帐户进行两次猜测之前就停止它。特别是如果您使用的是 CPU 方面相当昂贵的 bcrypt。
  2. 恶意恶作剧者只需每 10 分钟尝试以该用户身份登录 5 次,就可以锁定他们知道电子邮件地址的任何用户。

请注意,阻止 IP 地址带有自己的一组误报和漏报。合法的代理服务器和僵尸网络意味着阻止 IP 地址可能会导致问题。它确实解决了 90% 的暴力破解问题。

CAPTCHA 还带有自己的一组误报和漏报。我知道我在阅读大量 ReCAPTCHA 图像时遇到了麻烦,而且我看到机器人攻击我的系统比我能更好地解决 ReCAPTCHA。除了它对我的客户产生的安慰剂效应外,我根本不再使用 CAPTCHA。

你说:

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

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

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

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

于 2013-05-12T08:38:50.867 回答