현재 위치: > 최신 기사 목록> crypt () + 세션을 사용하여 로그인 확인을 구현하십시오

crypt () + 세션을 사용하여 로그인 확인을 구현하십시오

M66 2025-05-31

웹 응용 프로그램 개발에서 사용자 로그인 검증의 보안이 특히 중요합니다. PHP는 다양한 암호화 방법을 제공하며 Crypt () 기능은 다중 암호화 알고리즘에 대한 단순성과 지원에 인기가 있습니다. 이 기사는 Crypt () 함수 및 PHP 세션 기능을 결합하여 보안 로그인 검증 기능을 달성하는 방법을 자세히 소개합니다.

1. crypt () 함수 소개

Crypt () 는 PHP의 내장 암호 암호화 기능이며 다양한 암호화 알고리즘 (예 : DES, Blowfish, SHA-256, SHA-512 등)을 지원합니다. 기본 사용량은 다음과 같습니다.

 $hashed = crypt($password, $salt);
  • $ 암호 는 원래 비밀번호입니다.

  • $ 소금은 암호화의 복잡성을 향상시키고 무지개 테이블 공격을 방지하는 데 사용되는 소금 값입니다.

참고 : 보안을 보장하기 위해 특정 길이와 복잡성의 무작위로 생성 된 문자열을 사용하는 것이 좋습니다.

2. crypt ()를 사용하여 암호를 암호화하고 확인하십시오

로그인 시스템은 일반적으로 두 부분으로 구성됩니다.

  • 등록 할 때 사용자 비밀번호는 crypt ()를 사용하여 암호화되고 데이터베이스에 저장됩니다.

  • 로그인 할 때 동일한 소금을 사용하여 입력 된 암호를 암호화하고 데이터베이스에 저장된 암호와 비교하십시오.

3. 로그인 확인을 달성하기 위해 세션과 결합했습니다

세션을 사용하여 사용자의 로그인 상태를 저장하여 사용자가 성공적으로 로그인 한 후 각 요청에 대한 재검토를 피하십시오.

샘플 코드

다음 예제는 간단한 로그인 프로세스를 보여줍니다.

 <?php
session_start();

// 데이터베이스에 저장된 사용자 이름 및 암호화 된 암호를 시뮬레이션합니다.
$users = [
    'user1' => '$6$rounds=5000$m66.netRandomSalt$Jj4K.SR0QYOSpZp2...Q1uEXAMPLEhashedpassword', // SHA-512 암호화 예
];

// 양식 제출 처리 로그인
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $username = $_POST['username'] ?? '';
    $password = $_POST['password'] ?? '';

    if (isset($users[$username])) {
        $storedHash = $users[$username];
        // 저장된 데이터베이스에 사용하십시오 hash 소금으로 암호화,일관성을 유지하십시오
        $inputHash = crypt($password, $storedHash);

        if (hash_equals($storedHash, $inputHash)) {
            // 비밀번호 확인이 성공했습니다,로그인 상태를 저장합니다
            $_SESSION['username'] = $username;
            echo "성공적으로 로그인하십시오,환영,{$username}!";
        } else {
            echo "오류 비밀번호。";
        }
    } else {
        echo "사용자 이름이 존재하지 않습니다。";
    }
    exit;
}

// 로그인되었는지 여부를 결정하십시오
if (isset($_SESSION['username'])) {
    echo "로그인했습니다,다시 오신 것을 환영합니다,{$_SESSION['username']}!";
} else {
    // 로그인 양식을 표시하십시오
    echo <<<HTML
<form method="POST" action="https://m66.net/login.php">
    사용자 이름:<input type="text" name="username" required><br>
    비밀번호:<input type="password" name="password" required><br>
    <input type="submit" value="로그인하십시오">
</form>
HTML;
}
?>

4. 키 포인트 설명

  • 소금 처리 <br> 데이터베이스에 저장된 암호 해시에는 이미 소금 정보가 포함되어 있습니다. crypt () 함수는 검증 중에 저장된 해시를 염으로 사용하여 암호화 방법이 염과 일치하도록합니다.

  • 시간 공격 방지 <br> Hash_equals () 함수를 사용하여 암호 해시를 비교하여 문자열 비교시 가능한 시간 차이를 피하십시오.

  • 세션 보안 <br> Session_Start ()를 사용하여 세션을 시작하고 성공적으로 로그인 한 후 사용자 정보를 $ _session 에 저장하여 후속 요청에서 사용자 상태를 인식 할 수 있도록합니다.

  • URL 교체 <br> 이 예에서는 모든 링크 도메인 이름이 요구 사항을 충족하는 M66.NET 으로 대체됩니다.

5. 추가 최적화 제안

  • password_hash 및 password_verify를 사용하십시오
    PHP 5.5+는 더 안전하고 사용하기 쉬운 관리 SALT 및 암호화 알고리즘이 내장 된 Password_Hash ()Password_Verify ()를 사용하는 것이 좋습니다.

  • HTTPS를 켭니다
    로그인 페이지 및 제출 인터페이스가 HTTPS를 사용하여 전송되어 중간의 공격을 방지하십시오.

  • 세션 납치 방지 <br> session.cookie_httponlysession.cookie_secure 와 같은 적절한 세션 구성을 설정하십시오.