Php 实施登录系统(最大登录次数、IP检查等)

Php 实施登录系统(最大登录次数、IP检查等),php,login,Php,Login,在php登录程序中要实现的最重要的元素是什么 我已经知道有很多事情要做,但我对具体的方法/正确的顺序感兴趣,以实现这些(如果我可能错过了一些东西,还有其他事情) 在一些登录尝试后验证码 多次尝试后锁定用户帐户(通过电子邮件自动验证重新激活) 动态增加IP地址错误尝试后的等待时间(?) 随着时间的推移,该时间跨度再次减小 (短期)如果确实需要,阻止IP地址(自动或通知某个IP急剧增加登录尝试的管理员) 发布IPs(也包括管理员或一段时间后自动发布) (当然,注册时会检查密码强度,并使用HTTP

在php登录程序中要实现的最重要的元素是什么

我已经知道有很多事情要做,但我对具体的方法/正确的顺序感兴趣,以实现这些(如果我可能错过了一些东西,还有其他事情)

  • 在一些登录尝试后验证码
  • 多次尝试后锁定用户帐户(通过电子邮件自动验证重新激活)
  • 动态增加IP地址错误尝试后的等待时间(?)
  • 随着时间的推移,该时间跨度再次减小
  • (短期)如果确实需要,阻止IP地址(自动或通知某个IP急剧增加登录尝试的管理员)
  • 发布IPs(也包括管理员或一段时间后自动发布)
(当然,注册时会检查密码强度,并使用HTTPS进行身份验证)

因此,首先:是否也需要采取一些措施/检查/步骤? 第二:该计划的合适具体实施是什么

这是我开始时应该做的(非常简单):
基于错误的尝试锁定IP和用户通常是一件坏事,你可以通过自己的错误阻止人们(如果我尝试admin/root 100X,我会将你锁定)。 我通常做以下事情

记录尝试的用户和IP地址。 如果y分钟内登录尝试次数超过x次(这是由您设置的,可以扩展,我通常在30分钟内尝试5次),则显示验证码

这些都是相互独立跟踪的,因此5个帐户上的5个IP尝试与1个用户帐户上的5个IP一样有效

我通常也会检查全局失败,即如果一小时内有超过100次失败的尝试,所有用户都需要输入验证码。这会阻止对许多用户名使用1个密码的人(例如,对所有有效用户帐户使用
hunter2


这种方式不会把人关在外面,它只要求提供额外的信息。我建议您使用现有的第三方验证码,而不是尝试实现自己的验证码。如果您想要严格的安全性,请始终使用自己的方法。执行public所做的操作将使攻击者了解您的系统。那么他们就不需要猜那么多东西了,因为他们知道你有什么


同样对于这个问题,这里人们会说你最有名的事情。因此,我认为您的安全性并不是很高。

在尝试x次后,仅将用户帐户屏蔽x分钟通常就足够了。很抱歉,尽管您键入了很多内容,但这里似乎还有一些努力的空间。你已经开始了,我猜,但是你们都有一长串抽象的东西(你可能想要所有的反馈),然后你来一些伪代码,当然。但是您希望实现
检查\u ip\u是否被阻止()
?为什么不告诉我们你被困在哪里?这本书看起来像是一本永无止境的大书,就像《问题/答案》。我的建议是将您的问题分成真实的、孤立的、可回答的问题。@user574632:我同意这在大多数情况下可能足够了,尽管我正在研究一个相当合理的应用程序,但我不能允许单个设备(重复)通过尝试密码等方式阻止所有用户(因为这里没有应用IP检查)@Nanne:我不需要你写出像
check\u if\u ip\u is blocked()
这样的函数,或者任何其他函数,恰恰相反,我正在寻找一个好的/工作的程序结构,它可以调用像这样的函数,但实际上可以处理上面提到的问题。(因此,我或多或少只是在寻找属于
else
块的内容,与其他部分的结构相同)我对函数的具体实现不太感兴趣(很容易实现/微调这些函数),而是更高层次的模式。我真的很喜欢30分钟内的5次尝试(分别针对用户和IP)!但这还不够,阻止某人为所有用户尝试一个密码-除非我只有5个用户^^^不,IP的价格相当便宜,一些僵尸网络可能有100个IP。哦,现在我明白你的意思了!我不太担心他们会改变这么多IP,尽管一些分布式攻击可能是可行的要做到这一点:-/…仍然很难区分忙碌的一天(可能有很多白痴不记得他们的密码)还有一个实际的攻击:-/你改变了你的评论,很棘手^^^我同意,但问题仍然是如何在那里区分,…是的,对不起-我误解了你的要求。与用户一起衡量100。我的是100,我没有达到这个极限(或接近这个极限)有超过1000个用户。这不是一个神奇的数字,只是效果最好的数字。这是一件好事,如果攻击者知道系统,但仍然无法进入,您的安全。您的方法依赖于安全性
    function onLoginTry($name, $pass)
    {
        // Following checks exit the script if necessary
        check_if_ip_is_blocked(); // also possibly unblock if time has come
        check_if_user_is_locked();
        check_if_captcha_is_used_if_needed();

        // Correct Login
        if (login_ok($name, $pass))
        { 
            login($name);
        }

        // False Login
        else
        {
            // Check here for number of tries so far etc (from DB)
            // ...
        }
    }

?>