登录失败次数限制(原生php代码实现)

来源:互联网 发布:长春淘宝客服挣钱么 编辑:程序博客网 时间:2024/06/07 15:30

登录密码错误次数限制

来自 https://www.3maio.com/w-detail/9

安全对每个网站的重要性,不言自明。 其中,登陆又是网站中比较容易受到攻击的一个地方,那么我们如何对登陆功能的安全性加强呢?

我们先来看一些知名的网站是如何做的

  • Github

    Github网站同一个账号在同一个IP地址连续密码输错一定次数后,这个账号是会被锁定30分钟的。如下图所示:

github登陆密码错误次数限制图

Github这么做的主要原因,我觉得主要基于以下考虑:

  1. 防止用户的账号密码被暴力破解

    • Sina

sina网站登陆功能其实也有类似的考虑,如下图:

sina登陆功能密码错误次数限制

实现思路

既然这么多网站的登陆功能都这么个功能,那么具体如何实现的。下面,就具体说说。

  • 思路

    1. 需要一个表(user_login_info)负责记录用户登录的信息,不管登录成功还是失败都记录。并且登陆失败还是成功需要能够区分开来。

    2. 每次登陆时,都先从user_login_info表查询最近30分钟内(这里假设密码错误次数达到5次后,禁用用户30分钟)有没有相关密码错误的记录,然后统计一下记录总条数是否达到设定的错误次数。

    3. 如果在相同IP下,同一个用户,在30分钟内密码错误次数达到设定的错误次数,就不让用户登录了。

具体代码与及表设计

  • 表设计

user_login_info表

   CREATE TABLE `user_login_info` (       `id` int(10) UNSIGNED PRIMARY KEY AUTO_INCREMENT  NOT NULL,       `uid` int(10) UNSIGNED NOT NULL,       `ipaddr` int(10) UNSIGNED NOT NULL COMMENT '用户登陆IP',       `logintime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP        COMMENT '用户登陆时间',       `pass_wrong_time_status` tinyint(10) UNSIGNED NOT NULL COMMENT '登陆密码错误状态'        COMMENT '0 正确 2错误'    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

user表(用户表)

   CREATE TABLE `user` (      `id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT,      `name` varchar(100) NOT NULL COMMENT '用户名',      `email` varchar(100) NOT NULL,      `pass` varchar(255) NOT NULL,      `status` tinyint(3) UNSIGNED NOT NULL DEFAULT '1' COMMENT '1启用 2禁用',       PRIMARY key(id)    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
  • 核心代码

    核心代码,请到https://www.3maio.com查看

原创粉丝点击