>  기사  >  데이터 베이스  >  비밀번호 재설정 기능을 구현하기 위해 안전한 MySQL 테이블 구조를 설계하는 방법은 무엇입니까?

비밀번호 재설정 기능을 구현하기 위해 안전한 MySQL 테이블 구조를 설계하는 방법은 무엇입니까?

王林
王林원래의
2023-10-31 11:53:011062검색

비밀번호 재설정 기능을 구현하기 위해 안전한 MySQL 테이블 구조를 설계하는 방법은 무엇입니까?

암호 재설정 기능을 구현하기 위해 안전한 MySQL 테이블 구조를 설계하는 방법은 무엇입니까?

현대 소프트웨어 개발에서는 사용자 계정의 비밀번호 유출 위험도 증가하기 때문에 사용자 계정의 비밀번호 재설정 기능이 점점 더 중요해지고 있습니다. 사용자 개인 정보 보호 및 데이터 보안을 보호하기 위해 개발자는 안전하고 신뢰할 수 있는 MySQL 테이블 구조를 설계하여 비밀번호 재설정 기능을 구현해야 합니다.

다음은 비밀번호 재설정 기능을 구현하는 데 도움이 될 수 있는 실행 가능한 MySQL 테이블 구조 설계입니다.

테이블 이름: 비밀번호_reset

열 이름 Type Description
id INT( 11) 기본 키, 자동 증가
user_id INT(11) 사용자 테이블과 연결된 외래 키
token VARCHAR(255) 비밀번호 재설정을 위한 고유 식별자, 무작위로 사용 생성된 문자열
expiration_time TIMESTAMP 비밀번호 재설정 링크 만료 기간
creation_time TIMESTAMP 기록 생성 시간

비밀번호 재설정 기능 구현 단계 다음과 같습니다 :

  1. 위의 테이블 구조를 만듭니다.
CREATE TABLE password_reset (
  id INT(11) NOT NULL AUTO_INCREMENT,
  user_id INT(11) NOT NULL,
  token VARCHAR(255) NOT NULL,
  expiration_time TIMESTAMP NOT NULL,
  creation_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (id),
  FOREIGN KEY (user_id) REFERENCES users(id)
);
  1. 사용자가 비밀번호 재설정을 요청하면 고유한 토큰을 생성하고 관련 정보를 비밀번호 재설정 테이블에 삽입하세요.
function generateToken() {
    $length = 32;
    $characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
    $token = '';
    
    for ($i = 0; $i < $length; $i++) {
        $token .= $characters[rand(0, strlen($characters) - 1)];
    }
    
    return $token;
}

$userId = 123; // 用户的ID
$expirationTime = date('Y-m-d H:i:s', strtotime('+1 day')); // 链接的有效期为一天
$token = generateToken();

$query = "INSERT INTO password_reset (user_id, token, expiration_time) VALUES ($userId, '$token', '$expirationTime')";

// 执行SQL插入操作
  1. 생성된 토큰을 사용자에게 보내고, 사용자는 토큰이 포함된 링크를 클릭하여 비밀번호를 재설정합니다.
  2. 사용자가 링크를 클릭하면 링크의 토큰이 존재하고 비밀번호 재설정 테이블에서 유효한지 확인하세요.
$token = $_GET['token']; // 从URL参数中获取token

$query = "SELECT * FROM password_reset WHERE token = '$token' AND expiration_time >= NOW()";
// 执行SQL查询操作
  1. 토큰이 유효하면 비밀번호 재설정 양식이 사용자에게 표시되고, 사용자는 새 비밀번호를 입력하고 양식을 제출합니다.
  2. 비밀번호 재설정 양식이 제출된 후 사용자 테이블에서 사용자 비밀번호를 업데이트하세요.
$newPassword = $_POST['new_password']; // 从表单中获取新密码
$hashedPassword = password_hash($newPassword, PASSWORD_DEFAULT); // 新密码进行哈希处理

$query = "UPDATE users SET password = '$hashedPassword' WHERE id = $userId";
// 执行SQL更新操作
  1. 이때, Password_reset 테이블에서 해당 사용자의 해당 데이터를 삭제해 주세요.
$query = "DELETE FROM password_reset WHERE user_id = $userId";
// 执行SQL删除操作

위의 MySQL 테이블 구조 설계 및 코드 예제 단계를 통해 사용자 계정의 비밀번호 보안을 보호하는 안전한 비밀번호 재설정 기능을 구현할 수 있습니다. 물론 보안은 지속적인 프로세스이므로 개발자는 적절한 입력 유효성 검사, HTTPS 사용 등과 같은 다른 보안 보호 조치도 고려해야 합니다.

위 내용은 비밀번호 재설정 기능을 구현하기 위해 안전한 MySQL 테이블 구조를 설계하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.