登录失败次数限制(原生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代码实现)
- 登录失败次数限制(原生php代码实现)
- PHP实现登录失败次数限制
- springboot整合shiro登录失败次数限制功能的实现代码
- php用户登陆代码(限制用户错误登录次数)(1/2)
- php微信开发 接口配置信息 如何代码实现,代码实现,入口文件 token 配置失败
- PHP不到100行代码实现SSO单点登录
- PHP通过session id 实现session共享和登录验证的代码
- spring security实现限制登录次数功能
- PHP不到100行代码实现SSO单点登录
- PHP实现QQ登录实例代码
- PHP通过session id 实现session共享和登录验证的代码
- 简单示例AJAX结合PHP代码实现登录效果代码-2
- 限制程序中某类操作的执行次数的算法设计及C代码实现
- 基于HashMap实现(用户登录三次失败后)24小时之内限制登录!
- 简单示例AJAX结合PHP代码实现登录效果代码
- 【C#】强类型DataSet实现登录次数限制
- 安卓服务端开发(1) 安卓结合PHP实现连接数据库验证登录功能(附全部代码)
- php cookie的操作实现代码(登录)