찾다

 >  Q&A  >  본문

Laravel 9는 bcrypt로 해시된 유효한 비밀번호를 거부합니다.

Laravel 9에서 일부 비밀번호 확인 실패 문제를 해결하는 데 며칠이 걸렸습니다. 비밀번호 testperson 解析为哈希值 yxc/wAmNCKV.YhpWOfyNoetCj/r3Fs5TyAskgZuIF/LEItWfm7rPW. 해당 데이터베이스 테이블을 직접 쿼리하여 이것이 올바른 해시 값인지 확인합니다. 그러나 Laravel의 인증 인프라는 이 비밀번호를 거부하고 인증을 거부합니다.

흔한 일이 아닙니다. 올바르게 구문 분석되는 비밀번호가 여러 개 있습니다. 예를 들어, 비밀번호 eo 解析为 y$uNWYvMVmagIwQ2eXnVKLCOAK1QFQdcRtxbvlghf.Xpg0U1w.N./N2를 입력하면 Laravel이 해당 비밀번호를 확인합니다. 동일한 메커니즘으로 두 사용자 레코드가 모두 생성되지만 권한은 서로 다릅니다(레코드의 부울 값으로 표시됨).

이 스택 오버플로 질문과 이 Treehouse 스레드에서 거짓 부정을 반환하는 것으로 식별된 함수 password_verify에서 버그를 발견했습니다.

구체적으로 다음은 오류 지점이 발생하는 Laravel의 스택입니다.

전체 스택을 확장한 후 로그인 컨트롤러의 login 메서드에서 다음 코드를 실행합니다.

으아아아

이 컨텍스트를 덤프하세요:

으아아아

해당 비밀번호를 SELECT users WHERE password= 쿼리에 입력하면 예상한 사용자를 얻게 됩니다.

무슨 일이에요? 이 문제를 어떻게 해결할 수 있나요?

P粉270842688P粉270842688239일 전496

모든 응답(1)나는 대답할 것이다

  • P粉464082061

    P粉4640820612024-03-29 11:37:34

    귀하가 제공한 해시가 "테스트 담당자" 해시라는 귀하의 주장은 실제로 잘못된 것 같습니다. 해시는 단방향이므로 표시된 해시의 출처를 알 수 없습니다. 참고: PHP 7.4에서 작동하지만 passwd_hash()의 솔트 옵션이 더 이상 사용되지 않기 때문에 PHP 8 이상에서는 작동하지 않을 것 같습니다.

    으아아아

    회신하다
    0
  • 취소회신하다