사용자 인증 시스템의 보안은 웹 사이트 나 응용 프로그램을 구축 할 때 중요한 고려 사항입니다. PHP는 암호 암호화 및 검증을 구현하는 다양한 방법을 제공하며, 그중에 Crypt () 함수는 클래식하고 강력한 암호화 도구입니다. 이 기사에서는 Crypt () 함수를 사용하여 암호 암호화, 확인 및 사용자 데이터 처리를 포함하여 안전한 사용자 등록 및 로그인 시스템을 구축하는 방법을 설명합니다.
crypt () 는 일방 통행 해시 알고리즘을 사용하여 문자열을 암호화하는 PHP가 제공하는 암호화 함수입니다. 제공된 SALT (SALT) 형식에 따라 다양한 암호화 알고리즘 (예 : MD5, SHA-256, SHA-512 및 Blowfish)을 지원합니다.
string crypt ( string $str , string $salt )
소금 의 가치는 암호화 알고리즘의 유형과 동작을 결정합니다. 보안의 경우 SHA-512 또는 Blowfish를지지하는 소금을 사용하는 것이 좋습니다.
사용자를 등록 할 때는 데이터베이스가 유출 되더라도 공격자가 암호를 쉽게 복원 할 수 없도록 데이터베이스에 비밀번호를 입금하기 전에 비밀번호를 암호화해야합니다.
<?php
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$username = $_POST['username'];
$password = $_POST['password'];
// 강한 소금을 만들고 암호를 암호화하십시오(사용SHA-512)
$salt = '$6$' . bin2hex(random_bytes(16)) . '$'; // SHA-512
$hashed_password = crypt($password, $salt);
// 데이터베이스에 사용자 이름 및 암호화 된 비밀번호를 저장하십시오(~에 의해SQLite예로)
$db = new PDO('sqlite:users.db');
$stmt = $db->prepare("INSERT INTO users (username, password) VALUES (?, ?)");
$stmt->execute([$username, $hashed_password]);
echo "성공적으로 등록되었습니다,제발 <a href='https://m66.net/login.php'>로그인하십시오</a>。";
}
?>
HTML 등록 양식 :
<form method="POST" action="">
사용자 이름:<input type="text" name="username" required><br>
비밀번호:<input type="password" name="password" required><br>
<input type="submit" value="등록하다">
</form>
로그인 할 때 원래 비밀번호를 알 필요가 없습니다. 데이터베이스에서 동일한 소금을 사용하여 사용자가 입력 한 암호를 암호화하고 저장된 해시와 비교하십시오.
<?php
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$username = $_POST['username'];
$password_input = $_POST['password'];
$db = new PDO('sqlite:users.db');
$stmt = $db->prepare("SELECT password FROM users WHERE username = ?");
$stmt->execute([$username]);
$row = $stmt->fetch(PDO::FETCH_ASSOC);
if ($row) {
$hashed_password = $row['password'];
if (crypt($password_input, $hashed_password) === $hashed_password) {
echo "로그인하십시오成功!다시 오신 것을 환영합니다,{$username}。";
} else {
echo "비밀번호错误。";
}
} else {
echo "사용자는 존재하지 않습니다。";
}
}
?>
HTML 로그인 양식 :
<form method="POST" action="">
사용자 이름:<input type="text" name="username" required><br>
비밀번호:<input type="password" name="password" required><br>
<input type="submit" value="로그인하십시오">
</form>
CREATE TABLE users (
id INTEGER PRIMARY KEY AUTOINCREMENT,
username TEXT UNIQUE NOT NULL,
password TEXT NOT NULL
);
HTTPS 사용 : 암호화 된 연결을 통해 모든 형태의 전송이 수행되도록하십시오.
CSRF 보호 추가 : 크로스 사이트 요청 위조 공격 방지.
로그인 시도 수를 제한하십시오 : 무차별 력 균열 방지.
PHP 버전 업데이트 시간 : 암호화 알고리즘과 기능을 안전하게 유지하십시오.
보다 최신 기능 (예 : Password_hash)을 사용하는 경우이 기사의 논리를 참조 할 수 있습니다 . crypt ()는 유효하지만 최신 PHP는 Password_hash () 및 Password_Verify ()를 사용하여 권장합니다.
Crypt () 함수와 함께 제공되는 비밀번호 검증 로직을 합리적으로 사용하면 비교적 안전한 사용자 인증 시스템을 구축 할 수 있습니다. Modern PHP는 Password_hash () 와 같은 고급 인터페이스를 제공하지만 Crypt ()의 작동 방식을 이해하면 여전히 암호 암호화의 특성을 깊이 이해하는 데 도움이 될 수 있습니다. Crypt () 는 여전히 일부 낮은 버전의 PHP 환경 또는 특수 호환성 요구 사항에서 실질적인 선택입니다.