2012-03-30 5 views
0

내 PHP 코드 지정자 사이트는 3 가지 유형의 전자 메일을 사용자에게 보내며 HTML 형식이며 '브라우저에서이 이메일보기'링크 옵션을 원합니다.html 전자 메일에 대한 안전한 '보기 전자 메일보기'링크 만들기

어떻게 합리적으로 안전한 링크를 만들 수 있습니까? 이메일의 2가 민감한 특성 :

  1. 은 등록 새로운 기능 : 이메일은 내용과 패스를 잊어 버렸

  2. 활성화 링크를 보여줍니다 이메일 링크가 통과 재설정을 보여줍니다


다음과 같이하면 충분합니까? :

$code = sha1(mt_rand(10000,99999).time().$user_email); 

$link = 'email/view/' . $code . '/' . $user_id . '/'; 

     => http://mysite.com/email/view/c0acc09c6d00b706e1e511e52f286b1859067047/213/ 


따라서 인증은 임의의 해시와 user_id를 기반으로 수행됩니다. 그것은 또한 사용자 아이디를 해시 할 가치가 있습니까?

+0

나는 당신이 2 가지 다른 것들에 대해 이야기하고 있다고 생각합니다. 1) 브라우저에서 이메일을 표시하는 방법 (내가 본 적이없는 옵션) 및 2) 사용자를 인증 할 이메일에 URL을 제공하는 방법. 나는 후자가 당신이 정말로 성취하려고 노력하는 사람이라고 생각합니다. 맞습니까? – Anthony

+0

인수없이'mt_rand()'를 사용하십시오. 그러면 99999 대신 수십억 개의 가능한 숫자를 얻을 수 있습니다.'time() '대신'microtime()'을 사용하면 더 많은 예측할 수없는 해시를 얻을 수 있습니다. 가능한 해시 수를 늘리는 것이 전부입니다. – kijin

+0

감사합니다. 해시를 sha1 (mt_rand(). microtime(). $ user_email)으로 업데이트했습니다. – Quadrant6

답변

2

URL 매개 변수로 user_id를 포함시키지 않고 해시를 고수 할 것입니다.

누군가가 링크를 탐색하면 해시는 데이터베이스에 저장되어있는 항목과 교차 체크하고 일치하는 경우 해당 이메일과 연결된 정보 (예 : 사용자 이름, 전자 메일)를 가져옵니다. 양식을 작성하면 입력 한 데이터와 호환되는지 확인할 수 있습니다.

예를 들어 사용자가 암호를 잊어 버린 경우 전자 메일 주소를 입력하자마자 암호를 임의의 값 (해시로 저장 됨)으로 재설정하고이 저장된 해시를 자신의 전자 메일 주소로 URL 매개 변수로 사용합니다 전자 메일을 재설정하십시오.

+0

Thx, 나는 그것이 고유 한 사용자 ID를 보장한다고 생각하고 있었습니까? 해시에서 이메일을 사용하고 있기 때문에 충돌이 없어야합니다 (이메일은 등록시 고유해야 함). – Quadrant6

+1

그래, 그냥'md5 (time(). $ user_id)'를 사용했다. 만약 해시가 다른 것과 똑같을 가능성이 희박하다면'time()'대신'microtime()'을 사용할 수 있습니다. – hohner

0

민감한 페이지를보고 나면 해당 페이지를 두 번째로 삭제하는 것이 좋습니다. 이메일을 보내면 해시가 있습니다. db에 저장되고 페이지가 열리면 해시가 존재하는지 확인하고 페이지 뷰를 허용하면 db에서 해시를 제거하여 페이지가 두 번째로 보일 경우 확인에 실패하게합니다. (이메일에서 동일한 링크를 두 번 볼 필요가 없다고 가정).

+0

Thx, 비밀번호 재설정의 경우 1보기 후에 제거합니다. 만료 날짜가 좋을지라도 나머지는 확실 할 수 있습니다. – Quadrant6

+0

무언가를 두 번 이상 볼 수 있다면 실제로 민감한 내용을 볼 수 있기 전에 먼저 로그인하도록하는 것이 가장 좋습니다. – BenOfTheNorth

+0

맞아, 그게 좋은 지적이야. – Quadrant6

관련 문제