현재 위치: > 최신 기사 목록> Password_verify 사용 방법 사용자가 입력 한 암호가 올바른지 확인하십시오.

Password_verify 사용 방법 사용자가 입력 한 암호가 올바른지 확인하십시오.

gitbox 2025-05-29

PHP에서 사용자의 암호가 올바른지 확인하는 권장되고 안전한 방법 중 하나는 Password_Verify () 함수를 사용하는 것입니다. 이 기능은 PHP 5.5에 도입되었으며 Password_hash () 로 암호화 된 암호를 처리하도록 설계되었습니다. Password_Verify () 는 초기 일반 텍스트 비교보다 안전하거나 MD5/SHA1 해싱을 사용하는 것이 BCrypt 및 기타 강력한 해싱 알고리즘을 지원하기 때문에 사용합니다.

기본 사용

Password_Verify ()가 로그인 할 때 데이터베이스에 저장된 암호 해시와 사용자가 입력 한 암호를 비교하는 일반적인 시나리오. 기본 예는 다음과 같습니다.

<code> <? php // 사용자가 입력 한 비밀번호 $ inputpassword = $ _post [ 'password'];

// 데이터베이스에서 얻은 해시 비밀번호 (예 : 등록 할 때 Password_Hash ()에 의해 생성됨)
$ StoredHash = '$ 2Y $ 10 $ 10 $ NOUIS5KJ7NATUTFKBY1VEEVS1ZRWGFZKTFZ7VF6HG8NQZ5U2YFHY';

if (password_verify ($ inputpassword, $ storedhash)) {
Echo "비밀번호가 정확하고 로그인 허용";
} 또 다른 {
Echo "비밀번호 오류";
}
?>
</코드>

방법 1 : 데이터베이스와 함께 사용합니다

실제 응용 프로그램에서 암호 해싱은 일반적으로 데이터베이스에 저장됩니다. 확인 중에 데이터베이스에서 사용자의 해당 해시를 읽은 다음 사용자의 비밀번호와 비교해야합니다.

<code> <? php // 사용자 이름과 암호가 Post $ username = $ _post [ 'username']를 통해 전달된다고 가정합니다. $ password = $ _post [ 'password'];

// 데이터베이스 연결 (예제 PDO 사용)
$ pdo = new pdo ( 'mysql : host = localhost; dbname = myapp', 'dbuser', 'dbpass');

// 쿼리 사용자 비밀번호 해시
$ stmt = $ pdo-> 준비 ( "username =?"사용자에서 "password_hash를 선택하십시오.");
$ stmt-> execute ([$ username]);
$ hash = $ stmt-> fetchcolumn ();

if ($ hash && password_verify ($ password, $ hash)) {
에코 "성공적으로 로그인";
} 또 다른 {
Echo "사용자 이름 또는 비밀번호의 오류";
}
?>
</코드>

방법 2 : 자동으로 만료 된 해시를 재 구축합니다

Password_Verify ()를 사용하는 경우 이전 해시 알고리즘이 더 이상 권장되지 않는 경우 (예 : 매개 변수가 만료 됨) Password_Needs_RHASH () 로 암호 해시를 자동으로 업그레이드 할 수 있습니다.

<코드> <? php $ 옵션 = [ 'cost'=> 12]; if (password_verify ($ password, $ hash)) {if (password_needs_rehash ($ hash, password_default, $ 옵션)) {$ newhash = password_hash ($ password, password_default, $ 옵션); // 데이터베이스에서 사용자의 해시를 업데이트하십시오. $ stmt = $ pdo-> 준비 ( "Usude User Set Password_hash =? where username =?"); $ stmt-> execute ([$ newhash, $ username]); } echo "로그인 성공적으로, 비밀번호 해시가 업데이트되었습니다"; } else {echo "비밀번호 오류"; }?> </code>

방법 3 : 인터페이스를 사용하여 검증 로직을 캡슐화하십시오

프로젝트의 유지 가능성을 위해 비밀번호 처리 정책을 중앙에서 관리하기 위해 비밀번호 검증 로직을 별도의 메소드 또는 클래스로 캡슐화하는 것이 좋습니다. 예를 들어:

<code> <? php class auth {public static function verifypassword ($ inputpassword, $ storedhash) : bool {return password_verify ($ inputpassword, $ storedhash); }}?> </code>

통화 방법 :

<code> <? php if (auth :: verifypassword ($ _ post [ 'password'], $ storedhash)) {echo "verification passed"; } else {echo "확인 실패"; }?> </code>

주목해야 할 것

  • 사용자가 비밀번호를 입력 한 다음 데이터베이스와 비교하지 마십시오. 소금 값과 해싱 알고리즘은 내부적으로 password_verify () 에 의해 처리됩니다.

  • MD5 () 또는 SHA1 () 과 같은 오래된 해시 함수를 사용하지 않으며, 현대의 공격 방법에 더 이상 안전하지 않습니다.

  • 해시 문자열은 돌이킬 수 없으며 원래 비밀번호를 복원하는 데 사용할 수 없습니다.

  • password_hash ()를 사용하여 생성 된 해시는 매번 다르지만 password_verify () 로 확인할 수 있습니다.

요약

Password_Verify () 사용은 보안 사용자 인증을 구현할 때 주요 링크 중 하나입니다. 최신 해싱 알고리즘을 사용 할뿐만 아니라 개발자의 검증 로직을 단순화하고 암호 해싱 업그레이드를 용이하게합니다. 실제 프로젝트에서는 데이터베이스 작업, 캡슐화 로직 및 자동 재구성 메커니즘과 함께 견고한 비밀번호 검증 시스템을 구축하는 것이 좋습니다.

Password_Verify () 및 비밀번호 처리에 대한 자세한 모범 사례는 공식 문서를 참조하거나 https://gitbox.net/docs/php-password-security를 ​​방문하십시오.