회원가입에 솔트 추가하기
그럼, 여러분은 이미
사실 이 주장은 완전히 정확하지는 않습니다. 현재 악의적인 해커들은 인기 있는 비밀번호와 그렇지 않은 비밀번호의 해시 라이브러리를 구축했으며, 어떤 바보도 그냥 해시를 검색함으로써 비밀번호를 알아낼 수 있습니다.
이는 충분히 단순하고 일반적인 비밀번호에 관한 것입니다.
예를 들어, 827ccb0eea8a706c4c34a16891f84e7b라는
해시를 검색해 보세요. 구글 검색 결과에서
바로 이게 비밀번호
충분히 복잡한 비밀번호의 해시는 이런 식으로 추측할 수 없습니다 (시도해 보세요).
그렇다면 문제가 무엇이냐고 물을 수 있습니다. 우리 모두 복잡한 비밀번호로 가입하도록 합시다. 그러나 문제가 있습니다. 대부분의 사용자는 자신의 데이터 보안에 대해 깊이 생각하지 않고 상당히 단순한 비밀번호를 입력할 수 있습니다.
가입 시 최소 글자 수를
물론 비밀번호 복잡도를 검사하는 더 똑똑한 알고리즘을 생각해낼 수 있지만, 다른 해결책이 있습니다.
이 해결책의 요점은 다음과 같습니다: 비밀번호에
즉, 가입 시 다음과 같은 작업을 하게 될 것입니다:
<?php
$salt = '1sJg3hfdf'; // 솔트 - 복잡한 임의 문자열
$password = md5($salt . $_POST['password']); // 비밀번호를 솔트 처리된 해시로 변환
?>
이 경우 솔트는 각 사용자마다 다르며, 가입 시점에 무작위로 생성해야 합니다.
이 작업을 수행할 준비된 함수는 다음과 같습니다:
<?php
function generateSalt()
{
$salt = '';
$saltLength = 8; // 솔트 길이
for($i = 0; $i < $saltLength; $i++) {
$salt .= chr(mt_rand(33, 126)); // ASCII 테이블의 문자
}
return $salt;
}
?>
이 함수를 사용하여 우리 코드를 다음과 같이 다시 작성할 수 있습니다:
<?php
$salt = generateSalt(); // 솔트
$password = md5($salt . $_POST['password']); // 솔트 처리된 비밀번호
?>
다시 강조하지만, 이것들은 가입 시의 변경사항입니다. 데이터베이스에는 단순한 비밀번호 해시가 아닌, 솔트 처리된 비밀번호의 해시를 저장합니다.
이게 전부는 아닙니다: 사용자 테이블에는
위에서 설명한 솔트 처리된 비밀번호를 사용한 회원가입을 구현하세요.