"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > PHP에서 회원 전용 페이지 로그인 시스템을 안전하게 구현하는 방법은 무엇입니까?

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

2024년 11월 17일에 게시됨
검색:891

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

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

제공된 코드 관련 문제

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

  1. 쿼리 결과 검색: $data1 = $conn->query($sql1);를 사용하는 대신 올바른 접근 방식은 $data = mysqli_fetch_array( $conn->쿼리($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().

제안 솔루션

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

개선된 코드

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

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();
?>
최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3