PHP에서 회원 전용 페이지 로그인 시스템을 안전하게 구현하는 방법은 무엇입니까?

Barbara Streisand
풀어 주다: 2024-11-23 13:21:12
원래의
845명이 탐색했습니다.

How to Securely Implement a Member-Only Page Login System in PHP?

PHP: 로그인 시스템을 통한 회원 전용 페이지 보안

제공된 코드 관련 문제

제공된 PHP 코드는 서비스를 방해하는 몇 가지 문제에 직면합니다. 기능:

  1. 쿼리 검색 결과: $data1 = $conn->query($sql1);를 사용하는 대신 $data = mysqli_fetch_array($conn->query($sql1));를 사용하는 것이 올바른 접근 방식입니다. 또는 $data = $conn->query($sql1)->fetch_array(); 쿼리 결과를 가져옵니다.
  2. 데이터베이스 연결 및 실행: 데이터베이스에 대한 연결은 $total = $data = 0;을 사용하여 설정되어야 합니다.
  3. MySQLi 구문: 토큰을 삽입하는 쿼리에서는 테이블 및 열 이름 주위에 백틱()을 사용해야 합니다(INSERT INTO 토큰(tk, gauth) VALUES(?,? )`) 작은따옴표 대신
  4. 사용자 인증: 인증 논리가 반환되어야 합니다. 부울 값에 의존하는 대신 쿼리 결과($result = $conn->query($sql3)->fetch_array();).
  5. 토큰 생성: 기존 토큰 생성 방법은 openssl_random_pseudo_bytes()를 사용하므로 안전하지 않습니다. 대신 코드는 random_bytes()와 같은 암호화 보안 난수 생성기(CSPRNG)를 사용해야 합니다.

제안된 솔루션

  1. 데이터베이스 운영 단순화: 단일 쿼리를 사용하여 사용자 정보를 검색하고 자격 증명을 확인하세요.
  2. 사용 준비된 명령문: SQL 주입 취약점을 방지하기 위해 매개변수를 바인딩합니다.
  3. 안전하게 토큰 생성: 보안 토큰 생성을 위해 random_bytes() 또는 유사한 함수를 사용합니다.
  4. 세션에 인증 데이터 저장: 인증 토큰을 세션 변수 대신 세션 변수에 저장합니다. cookie.
  5. 토큰 유효성 검사: 토큰 테이블에 대해 데이터베이스 쿼리를 수행하여 제공된 토큰의 유효성을 검사합니다.

향상된 코드

다음 수정된 코드는 확인된 문제를 해결하고 더욱 안전한 회원 전용 페이지 로그인 시스템을 제공합니다.

<?php
    session_start();
    error_reporting(0);

    $servername = "localhost";
    $username = "root20";
    $password = "jjewett38";
    $db = "vws";

    // Create connection
    $total = $data = 0;
    $conn = new mysqli($servername, $username, $password, $db);

    // Check connection
    if ($conn->connect_error) {
        die("Connection failed: " . $conn->connect_error);
    }

    // Prepare statement for user authentication
    $sql_auth = $conn->prepare("SELECT * FROM users WHERE username = ? AND password = ?");
    $sql_auth->bind_param("ss", $_POST['uname'], $_POST['pss']);
    $sql_auth->execute();
    $result_auth = $sql_auth->get_result();

    // Authenticate user
    if ($result_auth->num_rows > 0) {
        $user = $result_auth->fetch_assoc();
        $correct = TRUE;
    } else {
        $correct = FALSE;
    }

    // Generate token
    if ($correct === TRUE) {
        $hex = bin2hex(random_bytes(3));
        $_SESSION['auth'] = $hex;
        $_SESSION['logstat'] = TRUE;
    }

    // Close connection
    $conn->close();
?>
로그인 후 복사

위 내용은 PHP에서 회원 전용 페이지 로그인 시스템을 안전하게 구현하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿