您的位置:首页 > 编程语言 > PHP开发

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

2017-08-17 13:59 866 查看

登录密码错误次数限制

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

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

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

Github

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



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

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

Sina

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



实现思路

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

思路

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

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

如果在相同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查看
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  密码 php 安全 破解