반응형
나는 간단한 등록 스크립트를 PHP로 작성했고 내가하는 방식이 사용자 암호를 저장할 수있을만큼 안전한지 궁금했습니다. 32 비트 랜덤 솔트를 생성하고이를 sha1 해시 암호에 추가하고 있습니다.
//create new validator object
$validator = new data_validation();
//validate user input
$firstName = $validator->validate_fname($firstName); //is the first name a string?
$lastName = $validator->validate_lname($lastName); // is the last name a string?
$username = $validator->validate_username($username); // is the username a string?
$email = $validator->validate_email($email); //is the email in valid format?
//make sure there isn't duplicate emails
$valQuery = $link->query("SELECT email FROM users WHERE email = '" .$email. "'");
if ($valQuery->num_rows == 1) {
echo "An email is already registered with that address";
return false;
}
// generate a random salt for converting passwords into sha1
$salt = $link->real_escape_string(bin2hex(mcrypt_create_iv(32, MCRYPT_DEV_URANDOM)));
$saltedPW = $password . $salt;
$hashedPW = sha1($saltedPW);
mysqli_connect($db_host, $db_user, $db_pass) OR DIE (mysqli_error());
// select the db
mysqli_select_db ($link, $db_name) OR DIE ("Unable to select db".mysqli_error($db_name));
// our sql query
$sql = "INSERT INTO users (first_name, last_name, username, email, password, salt) VALUES ('$firstName', '$lastName', '$username', '$email', '$hashedPW', '$salt');";
//save the updated information to the database
$result = mysqli_query($link, $sql) or die("Error in Query: " . mysqli_error($link));
if (!mysqli_error($link))
{
$row = mysqli_fetch_assoc($result);
$_SESSION['user_id'] = $row['user_id'];
$_SESSION['loggedin'] = TRUE;
header("Location: ../home");
}
또한 절차 적 및 oop php의 조합을 사용하고 있습니다. 대부분은 절차 적으로 이루어 지지만 위의 스크립트에서 사용 된 유효성 검사 클래스와 같은 몇 가지 oop 클래스가 있습니다. 두 스타일을 모두 사용하면 성능 문제가 발생합니까?
해결 방법
가장 중요한 것은:
- 가능하면 scrypt를 사용하세요. 할 수 없다면 bcrypt.
- bcrypt 또는 scrypt를 사용할 수없는 경우 PBKDF2를 사용합니다.
[MD5, SHA1, SHA256, SHA512, SHA-3 등]은 모두 다량의 데이터 다이제스트를 가능한 한 짧은 시간에 계산하도록 설계된 범용 해시 함수입니다. 이것은 그들이 데이터의 무결성을 보장하고 암호를 저장하는 데 완전히 쓰레기를 보내는 데 환상적이라는 것을 의미합니다.
참조 페이지 https://stackoverflow.com/questions/13115242
반응형
'MySql' 카테고리의 다른 글
MySQL PHP 오류 : "참조로 매개 변수 2를 전달할 수 없습니다." (0) | 2021.01.22 |
---|---|
MySQL 현재 날짜를 MySQL 데이터베이스에 삽입하는 방법은 Java를 사용합니까? (0) | 2021.01.22 |
MySQL IN 절에 변수를 전달하는 방법은 무엇입니까? (0) | 2021.01.22 |
MySQL mysql tinyint (1) 대 tinyint (2) 대 tinyint (3) 대 tinyint (4) (0) | 2021.01.22 |
MySQL 배열 필드에 Doctrine2의 특정 값이 포함되어 있는지 쿼리하는 방법이 있습니까? (0) | 2021.01.22 |
댓글