2016-11-22 2 views
-1

오늘 학교에서 소금으로 안전 해싱에 대해 배웠고 password_hash를 사용하기 시작했습니다. 그것은 놀랍습니다. 그리고 md5를 사용하기 전에 매우 안전합니다. 하지만 지금은 뭔가 빠져 있습니다.password_hash 및 로그인 비밀번호 기억

내 데이터베이스에는 사용자 이름과 암호를 "기억"하기로 선택한 로그인 세션과 사용자가 저장되어 있습니다. 그런 다음 IP를 기반으로하고 마지막 레코드가 데이터베이스의 "기억"열에 대해 "예"또는 "아니오"를 가지고 있는지 여부에 따라 암호의 md5를 해독하고 암호 입력에 "값"으로 사용합니다. 하지만 (내가 아는 한) 암호 해독은 password_hash에서 가능하지 않습니다. 확인 만 할 수 있습니다. 맞습니까? 그렇다면 password_hash로 "비밀번호 기억"옵션을 구현하려면 어떻게해야할까요? http://php.net/manual/en/function.password-verify.php

그러나 단지 사용자, 암호 해독 암호로 아무것도 할 필요가 없습니다를 기억하는 세션 변수 또는 뭔가를 설정 :

+2

'md5'의 암호 해독은 "기술적으로"불가능합니다 ... 코드를 사용하면 도움을 드릴 수 없습니다. – cmorrissey

+0

'키 '를'쿠키'에 저장하고,'id'와 동일한 키를 데이터베이스에 저장합니다. 그런 다음 페이지를로드하면 일치하는 코드가 있는지 확인할 수 있습니다. 그렇게하면 사이트에서 동일한 브라우저/장치인지 확인할 수 있습니다. – Nytrix

답변

0

일반적으로, 당신이 찾고있는 기능 password_verify()입니다.

0

remember me 기능은 쿠키를 사용하므로 해시는 서버 사이트뿐만 아니라 클라이언트 사이트에도 기본적으로 사용자 암호 해시 옆의 사용자 데이터베이스에 저장됩니다.

0

해시 된 암호를 해독 할 수 없습니다 (이론적으로는 적어도). 그것이 안전하다는 모든 이유입니다. 서버 측에서 비밀번호가 필요없는 사용자로 로그인하는 방법이 필요합니다. "저를 기억하십시오"부분이 잘 검사하면 암호를 확인할 부분을 우회하십시오.

사이드가 아니라면 IP 주소는 실제로 사용자의 세션을 기억하는 좋은 방법은 아닙니다. NAT 뒤에있는 여러 컴퓨터가 서버와 동일한 IP를 가진 것처럼 보일 수 있습니다. 대신 쿠키를 사용하십시오.

2

오해를 피하기 위해 remember-me 기능은 사용자 암호와 아무런 관련이 없습니다. 클라이언트 측 암호를 저장하면 심각한 보안 위반이됩니다.

일반적으로, 성공적으로 로그인 응용 프로그램 후 :

  1. 사용자 이름이나 암호의 independend하는 임의 토큰을 생성합니다.
  2. 그러면이 토큰을 클라이언트 측의 쿠키에 설정할 수 있습니다.
  3. 토큰의 해시는 사용자 ID와 함께 데이터베이스에 저장됩니다.
  4. 사용자가 암호를 묻는 대신 다음 번에 사이트를 방문하면 쿠키에서 토큰을 읽고 해시 한 다음 이미 저장된 토큰과 비교할 수 있습니다.
  5. 해시가 일치하는 경우 사용자는 사용자 이름과 암호를 입력하지 않고 사이트에 액세스 할 수 있습니다.
+0

'보통 로그인에 성공하면 응용 프로그램이 임의의 토큰을 생성합니다.'처음 로그인 한 것입니까? 또는 모든 로그인 후에 새로운 토큰을 생성합니까? – RIKI

+0

@OTARIKI - 사용자가 로그인하여 remember-me 쿠키를 요청할 때마다 새 토큰을 만듭니다 (물론 이것은 선택 사항이어야합니다). 사용자가 로그 아웃 한 후에 토큰이 더 이상 유효하지 않아야하므로 다음 번에 다른 토큰을 생성합니다. 여러 장치에 대해 여러 개의 토큰이있을 수도 있습니다. – martinstoeckli