CMS (Content Management Systems)에서 사용자 데이터의 보안, 특히 비밀번호 스토리지가 중요합니다. PHP와 함께 제공되는 Crypt () 함수는 고전적이고 안전한 비밀번호 암호화 방법입니다. 이를 사용하면 시스템의 보안을 크게 향상시킬 수 있습니다. 이 기사에서는 CMS 시스템에서 Crypt () 기능을 효과적으로 통합하여 암호 저장의 보안 및 유연성을 보장하는 방법에 대해 자세히 설명합니다.
Crypt () 는 PHP의 내장 암호화 기능이며 다양한 암호화 알고리즘 (예 : DES, Blowfish, SHA-256, SHA-512 등)을 기반으로 구현됩니다. 암호 해시 스토리지에 적합한 "소금 값"매개 변수를 전달하여 돌이킬 수없는 암호화 문자열을 생성합니다.
$hashed_password = crypt($password, $salt);
소금 가치는 암호화 보안을 보장하고 무지개 테이블 공격을 방지하는 핵심입니다.
crypt ()는 다음과 같이 형식으로 다른 알고리즘을 지원합니다.
DES (권장되지 않음, 낮은 보안)
blowfish (식별자 $ 2y $ , 최신 암호 해싱에 권장)
SHA-256 (식별자 $ 5 $ )
SHA-512 (식별자 $ 6 $ )
예를 들어 Blowfish 사용 :
$salt = '$2y$12$' . substr(bin2hex(random_bytes(16)), 0, 22);
$hash = crypt($password, $salt);
여기서 $ 2y $는 알고리즘을 나타내고, 12 는 비용 매개 변수 (반복 횟수, 값이 클수록 더 안전 할 수 없음), 22 자의 소금 문자입니다.
function createPasswordHash($password) {
// 임의의 소금을 생성하십시오,사용 Blowfish 연산
$salt = '$2y$12$' . substr(strtr(base64_encode(random_bytes(16)), '+', '.'), 0, 22);
// 해시를 생성하십시오
return crypt($password, $salt);
}
사용자가 등록하면 위의 함수를 통해 일반 텍스트 비밀번호가 생성되고 데이터베이스에 저장됩니다.
function verifyPassword($password, $hashedPassword) {
// 사용 stored hash 암호화에서 소금 비교
return crypt($password, $hashedPassword) === $hashedPassword;
}
로그인 할 때 데이터베이스에 저장된 해시 비밀번호를 꺼내고 소금을 사용하여 입력 암호를 다시 암호화하고 비교하고 일치하는지 결정하십시오.
비밀번호 필드는 스트링 유형으로 권장되며 Blowfish가 생성 한 해시를 수용하기 위해 최소 60 자 이상의 문자가 있습니다.
CREATE TABLE users (
id INT PRIMARY KEY AUTO_INCREMENT,
username VARCHAR(50) UNIQUE NOT NULL,
password_hash CHAR(60) NOT NULL,
...
);
소금을 사용자 정의하지 마십시오 : crypt ()에서 생성 된 소금 형식을 사용하거나 Password_hash () 함수 (php 5.5+)를 사용하여 작업을 단순화하십시오.
비밀번호 업데이트 : 오래된 암호에 약한 알고리즘을 사용하는 사용자를 고려하고 로그인 할 때 더 강한 암호화 해시를 재생합니다.
비밀번호 강도 : 약한 암호를 피하기 위해 프론트 엔드와 백엔드 강제 암호 복잡성을 결합합니다.
일반 텍스트 스토리지를 피하십시오 : 일반 텍스트 비밀번호 또는 가역적 암호화 암호를 저장하지 마십시오.
Php 5.5에서 시작하여 Password_hash () 및 Password_verify ()는 더 간단하고 안전한 암호 관리 인터페이스를 제공하며 기본 레이어는 Crypt () 를 기반으로합니다. 새로운 프로젝트를 먼저 사용하는 것이 좋습니다.
$hash = password_hash($password, PASSWORD_BCRYPT);
$isValid = password_verify($password, $hash);
CMS 버전이 이전이고 Crypt ()를 수동으로 사용해야하는 경우 위의 방법은 여전히 안전한 솔루션입니다.