영구 쿠키를 사용하여 PHP 로그인 시스템에서 'Remember Me' 기능을 안전하게 구현하는 방법은 무엇입니까?

Susan Sarandon
풀어 주다: 2024-11-10 00:36:02
원래의
436명이 탐색했습니다.

How to Securely Implement

PHP 로그인 시스템의 안전한 "Remember Me" 기능을 위한 영구 쿠키

소개

PHP 로그인 시스템에서 "기억하기" 기능을 구현하려면 보안 쿠키를 저장해야 합니다. 사용자의 브라우저. 이 쿠키를 사용하면 사용자는 브라우저를 닫거나 기기를 다시 시작한 후에도 로그인 상태를 유지할 수 있습니다.

데이터베이스 구조

기억정보를 안전하게 저장하려면 다음 위치에 별도의 테이블을 생성하세요. 데이터베이스:

CREATE TABLE `auth_tokens` (
    `id` integer(11) not null UNSIGNED AUTO_INCREMENT,
    `selector` char(12),
    `token` char(64),
    `userid` integer(11) not null UNSIGNED,
    `expires` datetime,
    PRIMARY KEY (`id`)
);
로그인 후 복사

선택기와 토큰 필드는 나를 기억하는 데 사용됩니다.

로그인 후

사용자가 로그인하고 "기억하기" 옵션을 선택하면 무작위 선택기(12자)와 인증기(33자)가 생성됩니다. bytes) Random_bytes() 함수 또는 유사한 방법을 사용하여 무작위성을 보장합니다.

다음을 사용하여 Remember Me 쿠키를 설정합니다. 코드:

setcookie(
    'remember',
    $selector . ':' . base64_encode($authenticator),
    time() + 864000, // expires in 10 days
    '/',
    'yourdomain.com',
    true, // TLS-only
    true  // http-only
);
로그인 후 복사

선택기, 해시된 인증자, 사용자 ID 및 만료 시간을 auth_tokens 테이블에 삽입하세요.

페이지 로드 시 재인증

다음 페이지 로드 시 사용자가 아직 로그인하지 않았고 Remember Me 쿠키가 set:

  1. 쿠키에서 선택기와 인증자를 추출합니다.
  2. auth_tokens 테이블에서 일치하는 선택기가 있는 행을 쿼리합니다.
  3. 계산된 해시를 비교합니다. hash_equals()를 사용하여 저장된 해시 인증자로 추출된 인증자를 사용합니다.
  4. 해시가 일치하면 세션 데이터를 설정하고 로그인 토큰을 다시 생성하여 사용자를 로그인합니다.

세부 정보

  • 충돌 저항: 9바이트 선택기는 72비트의 충돌 저항을 제공하고, 33바이트 인증기는 72비트의 충돌 저항을 제공합니다. 264비트.
  • 해싱 인증기: 인증기의 SHA256 해시를 저장하면 정보 유출과 관련된 위험이 완화됩니다.
  • 상시 비교: 별도의 선택기 및 인증자 필드는 데이터베이스에 대한 잠재적인 타이밍 공격을 제거합니다. 조회합니다.

위 내용은 영구 쿠키를 사용하여 PHP 로그인 시스템에서 'Remember Me' 기능을 안전하게 구현하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿