>백엔드 개발 >PHP 문제 >PHP에서 로그인 실패 횟수를 제한하는 방법

PHP에서 로그인 실패 횟수를 제한하는 방법

藏色散人
藏色散人원래의
2022-01-12 10:27:073726검색

PHP에서 로그인 실패 횟수를 제한하는 방법: 1. 사용자 로그인 정보를 기록하는 테이블 만들기 2. 잘못된 비밀번호 기록 보기 3. 동일한 IP에서 동일한 사용자에 대한 잘못된 비밀번호 수는 30개 이내입니다. 분 설정된 오류 횟수에 도달하면 사용자는 로그인이 허용되지 않습니다.

PHP에서 로그인 실패 횟수를 제한하는 방법


이 문서의 운영 환경: Windows 7 시스템, PHP 버전 7.1, DELL G3 컴퓨터

PHP는 로그인 실패 횟수에 제한을 적용합니다.

잘못된 로그인 비밀번호 수에 대한 제한

모두에게 안전합니다. 웹사이트의 중요성은 자명합니다. 그 중 로그인은 웹사이트에서 공격에 더욱 취약한 부분인데, 로그인 기능의 보안을 어떻게 강화할 수 있을까요? 安全对每个网站的重要性,不言自明。 其中,登陆又是网站中比较容易受到攻击的一个地方,那么我们如何对登陆功能的安全性加强呢?

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

  • Github

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


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

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

    实现思路

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

    • 思路

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

      2. 每次登陆时,都先从user_login_info表

        먼저 잘 알려진 웹사이트에서 어떻게 하는지 살펴보겠습니다🎜
        • Github🎜

          Github 웹사이트의 동일한 계정이 동일한 IP 주소에 일정 횟수 연속 잘못된 비밀번호를 입력하면 해당 계정이 30분 동안 잠깁니다. 🎜

        • 🎜🎜🎜Github이 이렇게 하는 주된 이유는 주로 다음과 같은 점에 근거한 것 같습니다. 고려 사항: 🎜

          1. 무차별 대입으로 사용자의 계정 비밀번호가 해독되는 것을 방지

          🎜많은 웹사이트의 로그인 기능에 이 기능이 있으므로 구체적으로 구현하는 방법은 무엇입니까? 아래에서 자세히 이야기해 보겠습니다. 🎜
          • 아이디어 🎜

            1. 테이블이 필요합니다(user_login_info)는 로그인 여부에 관계없이 사용자 로그인 정보를 기록합니다. 성공 또는 실패 모두 기록되었습니다. 그리고 로그인이 실패했는지, 성공했는지 구별할 수 있어야 합니다. 🎜

            2. 로그인할 때마다 user_login_info 테이블 최근 30분 동안(비밀번호 오류 횟수가 5회 도달 후 30분간 사용자 정지가 된다고 가정), 관련 비밀번호 오류 기록이 있습니까? 그러면 총 기록 수가 설정한 횟수에 도달했는지 계산합니다. 오류. 🎜

            1. 동일 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表(用户表)

          rreee
          • 핵심 코드
             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;
          추천 학습: "PHP 비디오 튜토리얼"

위 내용은 PHP에서 로그인 실패 횟수를 제한하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.