웹 응용 프로그램 개발에서 사용자 로그인 검증의 보안이 특히 중요합니다. PHP는 다양한 암호화 방법을 제공하며 Crypt () 기능은 다중 암호화 알고리즘에 대한 단순성과 지원에 인기가 있습니다. 이 기사는 Crypt () 함수 및 PHP 세션 기능을 결합하여 보안 로그인 검증 기능을 달성하는 방법을 자세히 소개합니다.
Crypt () 는 PHP의 내장 암호 암호화 기능이며 다양한 암호화 알고리즘 (예 : DES, Blowfish, SHA-256, SHA-512 등)을 지원합니다. 기본 사용량은 다음과 같습니다.
$hashed = crypt($password, $salt);
$ 암호 는 원래 비밀번호입니다.
$ 소금은 암호화의 복잡성을 향상시키고 무지개 테이블 공격을 방지하는 데 사용되는 소금 값입니다.
참고 : 보안을 보장하기 위해 특정 길이와 복잡성의 무작위로 생성 된 문자열을 사용하는 것이 좋습니다.
로그인 시스템은 일반적으로 두 부분으로 구성됩니다.
등록 할 때 사용자 비밀번호는 crypt ()를 사용하여 암호화되고 데이터베이스에 저장됩니다.
로그인 할 때 동일한 소금을 사용하여 입력 된 암호를 암호화하고 데이터베이스에 저장된 암호와 비교하십시오.
세션을 사용하여 사용자의 로그인 상태를 저장하여 사용자가 성공적으로 로그인 한 후 각 요청에 대한 재검토를 피하십시오.
다음 예제는 간단한 로그인 프로세스를 보여줍니다.
<?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;
}
?>
소금 처리 <br> 데이터베이스에 저장된 암호 해시에는 이미 소금 정보가 포함되어 있습니다. crypt () 함수는 검증 중에 저장된 해시를 염으로 사용하여 암호화 방법이 염과 일치하도록합니다.
시간 공격 방지 <br> Hash_equals () 함수를 사용하여 암호 해시를 비교하여 문자열 비교시 가능한 시간 차이를 피하십시오.
세션 보안 <br> Session_Start ()를 사용하여 세션을 시작하고 성공적으로 로그인 한 후 사용자 정보를 $ _session 에 저장하여 후속 요청에서 사용자 상태를 인식 할 수 있도록합니다.
URL 교체 <br> 이 예에서는 모든 링크 도메인 이름이 요구 사항을 충족하는 M66.NET 으로 대체됩니다.
password_hash 및 password_verify를 사용하십시오
PHP 5.5+는 더 안전하고 사용하기 쉬운 관리 SALT 및 암호화 알고리즘이 내장 된 Password_Hash () 및 Password_Verify ()를 사용하는 것이 좋습니다.
HTTPS를 켭니다
로그인 페이지 및 제출 인터페이스가 HTTPS를 사용하여 전송되어 중간의 공격을 방지하십시오.
세션 납치 방지 <br> session.cookie_httponly 및 session.cookie_secure 와 같은 적절한 세션 구성을 설정하십시오.