广告
返回顶部
首页 > 资讯 > 后端开发 > PHP编程 >php如何实现登录失败次数限制
  • 887
分享到

php如何实现登录失败次数限制

2023-06-26 04:06:26 887人浏览 八月长安
摘要

这篇“PHP如何实现登录失败次数限制”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“php如何实现登录失败次数限制”文章吧。p

这篇“PHP如何实现登录失败次数限制”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“php如何实现登录失败次数限制”文章吧。

php实现登录失败次数限制的方法:1、创建一个表用于负责记录用户登录的信息;2、查看密码错误的记录;3、在相同IP下,同一个用户在30分钟内密码错误次数达到设定的错误次数,就不让用户登录。

php如何实现登录失败次数限制


本文操作环境:windows7系统、PHP7.1版、DELL G3电脑

PHP实现登录失败次数限制

登录密码错误次数限制

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

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

  • GitHub

    github网站同一个账号在同一个IP地址连续密码输错一定次数后,这个账号是会被定30分钟的。

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

    实现思路

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

    具体代码与及表设计

    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;

     

    <?phpclass Login{    protected $pdo;    public function __construct()    {        //链接数据库        $this->connectDB();    }    protected function connectDB()    {        $dsn = "mysql:host=localhost;dbname=demo;charset=utf8";        $this->pdo = new PDO($dsn, 'root', 'root');    }    //显示登录页    public function loginPage()    {          include_once('./html/login.html');    }    //接受用户数据做登录    public function handlerLogin()    {        $email = $_POST['email'];        $pass = $_POST['pass'];        //根据用户提交数据查询用户信息        $sql = "select id,name,pass,reg_time from user where email = ?";        $stmt = $this->pdo->prepare($sql);        $stmt->execute([$email]);        $userData = $stmt->fetch(\PDO::FETCH_ASSOC);        //没有对应邮箱        if ( empty($userData) ) {            echo '登录失败1';            echo '<meta Http-equiv="refresh" content="2;url=./login.php">';            exit;        }        //检查用户最近30分钟密码错误次数        $res = $this->checkPassWrongTime($userData['id']);        //错误次数超过限制次数        if ( $res === false ) {            echo '你刚刚输错很多次密码,为了保证账户安全,系统已经将您账号锁定30min';            echo '<meta http-equiv="refresh" content="2;url=./login.php">';            exit;        }        //判断密码是否正确        $isRightPass = passWord_verify($pass, $userData['pass']);        //登录成功        if ( $isRightPass ) {            echo '登录成功';            exit;        } else {            //记录密码错误次数            $this->recordPassWrongTime($userData['id']);            echo '登录失败2';            echo '<meta http-equiv="refresh" content="2;url=./login.php">';            exit;        }    }    //记录密码输出信息    protected function recordPassWrongTime($uid)    {        //ip2long()函数可以将IP地址转换成数字        $ip = ip2long( $_SERVER['REMOTE_ADDR'] );        $time = date('Y-m-d H:i:s');        $sql = "insert into user_login_info(uid,ipaddr,logintime,pass_wrong_time_status) values($uid,$ip,'{$time}',2)";        $stmt = $this->pdo->prepare($sql);        $stmt->execute();    }        protected function checkPassWrongTime($uid, $min=30, $wTime=3)    {        if ( empty($uid) ) {            throw new \Exception("第一个参数不能为空");        }        $time = time();        $prevTime = time() - $min*60;        //用户所在登录ip        $ip = ip2long( $_SERVER['REMOTE_ADDR'] );        //pass_wrong_time_status代表用户输出了密码        $sql = "select * from user_login_info where uid={$uid} and pass_wrong_time_status=2 and UNIX_TIMESTAMP(logintime) between $prevTime and $time and ipaddr=$ip";        $stmt = $this->pdo->prepare($sql);        $stmt->execute();        $data = $stmt->fetchAll(\PDO::FETCH_ASSOC);        //统计错误次数        $wrongTime = count($data);        //判断错误次数是否超过限制次数        if ( $wrongTime > $wTime ) {            return false;        }        return $wrongTime;    }    public function __call($methodName, $params)    {        echo '访问的页面不存在','<a href="./login.php">返回登录页</a>';    }}$a = @$_GET['a']?$_GET['a']:'loginPage';$login = new Login();$login->$a();
    • 核心代码

    • 表设计

    • 思路

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

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

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

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

以上就是关于“php如何实现登录失败次数限制”这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注编程网PHP编程频道。

--结束END--

本文标题: php如何实现登录失败次数限制

本文链接: https://www.lsjlt.com/news/306945.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • php如何实现登录失败次数限制
    这篇“php如何实现登录失败次数限制”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“php如何实现登录失败次数限制”文章吧。p...
    99+
    2023-06-26
  • php怎么实现登录失败次数限制
    本文操作环境:windows7系统、PHP7.1版、DELL G3电脑PHP实现登录失败次数限制登录密码错误次数限制安全对每个网站的重要性,不言自明。 其中,登陆又是网站中比较容易受到攻击的一个地方,那么我们如何对登陆功能的安全性加强呢?我...
    99+
    2019-09-12
    PHP 登录
  • mysql限制用户登录失败次数,限制时间
    mysql用户登录限制设置 mysql 需要进行用户登录次数限制,当使用密码登录超过 3 次认证链接失败之后,登录锁住一段时间,禁止登录这里使用的 mysql: 8.1.0 这种方式不用重启数据库. ...
    99+
    2023-10-25
    mysql android adb 数据库
  • 如何实现Linux通过PAM限制用户登录失败次数
    本篇内容主要讲解“如何实现Linux通过PAM限制用户登录失败次数”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何实现Linux通过PAM限制用户登录失败次数”吧!  解决方法:  在拨接 v...
    99+
    2023-06-13
  • 基于Redis如何实现每日登录失败次数限制的方法
    这篇文章主要介绍基于Redis如何实现每日登录失败次数限制的方法,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!1. 思路下面是我以前写的代码,没考虑高并发场景。如果是高并发场景下,要...
    99+
    2022-10-18
  • MySQL限制登陆失败次数,限定用户重试时间
    设置方法 登录MySQL数据库 mysql -u root -p  输入一下命令安装插件 install plugin CONNECTION_CONTROL soname 'connection_control.so';instal...
    99+
    2023-09-02
    mysql centos 数据库 linux Powered by 金山文档
  • php登录失败页面提示如何实现
    本篇内容介绍了“php登录失败页面提示如何实现”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!php实现登录失败页面提示的方法:1、创建log...
    99+
    2023-07-04
  • php登录失败页面提示怎么实现
    本教程操作环境:Windows7系统、PHP8.1版、Dell G3电脑。php登录失败页面提示怎么实现?PHP实现的登录页面信息提示功能示例具体如下:login.php:<!DOCTYPE html> <html>...
    99+
    2022-11-19
    登录失败 php
  • PHP多设备登录失败如何解决
    本篇内容介绍了“PHP多设备登录失败如何解决”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1、了解多设备登录的原理多设备登录是指用户可以在多...
    99+
    2023-07-05
  • Postgresql限制用户登录错误次数的实例代码
    在oracle中我们可以通过设置FAILED_LOGIN_ATTEMPTS来限制用户密码登录错误的次数,但是在postgresql中是不支持这个功能的。尽管PostgreSQL支持e...
    99+
    2022-11-11
  • php怎么实现限制访问次数
    可以通过以下几种方法来实现限制访问次数:1. 使用数据库:在数据库中创建一个表,记录每个用户的访问次数和最后访问时间等信息。每次用户...
    99+
    2023-09-26
    php
  • Centos7下怎么实现用户登录失败N次后锁定用户禁止登陆
    这篇文章主要介绍了Centos7下怎么实现用户登录失败N次后锁定用户禁止登陆的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Centos7下怎么实现用户登录失败N次后锁定用户禁止登陆文章都会有所收获,下面我们一起...
    99+
    2023-06-30
  • redis 实现登陆次数限制的思路详解
    title: redis-login-limitation  利用 redis 实现登陆次数限制, 注解 + aop, 核心代码很简单. 基本思路 比如希望达到的要求是这样: 在 1min 内登...
    99+
    2022-10-18
  • 如何实现限制SSH单用户登录
    这篇文章给大家分享的是有关如何实现限制SSH单用户登录的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。使用方法: 用root权限在后台(比如screen里)运行这个脚本代码如下:#!/usr/bin/perl&nb...
    99+
    2023-06-13
  • PHP实现限制账号登录浏览器设备数量
    在传统的网站开发中,用户账号和密码是最基本的验证方式,但是如果用户在多个浏览器或设备上并发登录,就会带来一些风险。如果没有相应的限制措施,用户的账号就会成为恶意攻击或其他行为的涉嫌源头。为了避免这种情况的发生,本文将介绍如何使用PHP实现限...
    99+
    2023-05-31
    登录 限制个数 安全
  • 数据库新建用户登录失败如何解决
    当数据库新建用户登录失败时,可以考虑以下几种解决方法:1. 检查用户名和密码:确保输入的用户名和密码正确,特别是注意大小写是否匹配。...
    99+
    2023-09-13
    数据库
  • linux设置登录失败处理功能(密码错误次数限制、pam_tally2.so模块)和操作超时退出功能(/etc/profile)
    一、登录失败处理功能策略 1、登录失败处理功能策略(服务器终端) (1)编辑系统/etc/pam.d/system-auth 文件,在 auth 字段所在的那一部分添加如下pam_tally2.so模块的策略参数: auth require...
    99+
    2023-09-02
    linux 服务器 运维
  • SpringBoot如何整合Springsecurity实现数据库登录及权限控制
    目录第一步第二步是封装一个自定义的类第三步, 我们需要判断密码啦总结我们今天使用SpringBoot来整合SpringSecurity,来吧,不多BB 首先呢,是一个SpringBo...
    99+
    2022-11-12
  • php如何实现SSO登录
    本文操作环境:Windows7系统、PHP7.1版、Dell G3电脑。php如何实现SSO登录SSO单点登录设计及PHP实现建议先熟悉单点登录SSO相关概念。 SSO:单点登录,一次登录,所有相关系统均可以进入,无需重复登录实现方案:共享...
    99+
    2019-04-16
    php SSO
  • JS如何实现限时限次数点击按钮
    这篇文章主要为大家展示了“JS如何实现限时限次数点击按钮”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“JS如何实现限时限次数点击按钮”这篇文章吧。限时限次数点击按钮思路:用一个变量作为计数,点击...
    99+
    2023-06-29
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作