2013-10-21 1 views
1

웹 사이트의 활성화 시스템을 만들어야합니다. 사용자가 등록하고 전자 메일을받은 다음 쿼리 문자열에서 비밀 키가있는 링크를 클릭하고 내 끝에있는 스크립트가이를 디코딩합니다.웹 사이트의 활성화 링크를 생성하려면 어떤 방법을 사용합니까?

내 질문은 프로그래밍 자체가 아니라 오히려 링크를 생성하는 좋은 방법은 무엇입니까? 해싱은 생각 이었지만 한 가지 방법이었습니다. 내가 뭔가를 암호화해야합니까? 이 똑같은 일을 맡은 사람은 통찰력이 있습니까?

모두 것을 그것을 할 수있는 방법이 있나요 : 는 데이터베이스의 모든 비밀 코드를 저장하지 않습니다가, 쿼리 문자열

사용자는 기본 키가있는 테이블에에 명백한 사용자 정보를 넣어하지 않습니다 이드와 다른 정보. 미친 듯이 안전 할 필요는 없지만 쉽게 부서지지 않아야합니다. 나는 PHP로하고있다. 비슷한 질문을 찾을 수 없기 때문에 내가 간과했다면 링크를 고맙게 생각할 것입니다.

+0

여기를 확인하십시오 http://stackoverflow.com/questions/876139/how-to-generate-a-secure-activation-string-in-php – pregmatch

+0

가장 안전한 방법은 전 세계적으로 유일한 식별자 (GUID, UUID, 별칭이 무엇이든간에. PHP에는 'uniqid()'라는 함수가 있는데, 이와 달리 MySQL에는 UUID()라는 함수가 있습니다. 함수를 사용하여'UUID()'를 만들고 레코드에 할당 한 다음 활성화 식별자로 보내기 위해 사용하는 반면, 속도면에서는 PHP의'uniqid()'를 사용하는 것이 훨씬 더 효율적입니다 그리고 인덱싱이 더 효율적 일 것입니다. –

+0

업데이트 : 데이터베이스에 아무 것도 저장하지 말라는 것입니다. ID를 어떻게 든 암호화 할 수는 있지만 암호화 방법이 손상 될 위험이 있습니다 .AES 알고리즘과 올바른 키 중 하나를 선택하십시오. mi 충분하셔야합니다. 그렇게하면 추가 데이터 (활성화 링크)를 저장하지 않지만 암호화 된 데이터를 안전하게 전송하는 방법에 문제가 있습니다. 'base64_encode'를 사용하여 ID를 암호화 할 수 있습니다. 또 다른 아이디어는 추가 열 (또는 레코드에 테이블 매핑)을 사용하고 전자 메일을 통해 보내는 글로벌 고유 식별자를 사용하는 것입니다. –

답변

3

이전에 레코드 ID와 전자 메일 주소를 연결하여 md5를 수행했습니다. 원하는 경우 몇 가지 추가 문자 나 필드를 넣을 수 있습니다. 그런 다음 사용자가 링크를 클릭하면 동일한 선택 항목을 다시 실행하여 일치하는 항목이 있는지 확인합니다.

// generate the key 
select md5(concat(id,email,'Some custom text')) as `verification_key` from ... 

// verify the user 
select * from user where '$verifikation_key' = md5(concat(id,email,'Some custom text')); 

그런 다음 검증 된 것으로 표시하도록 사용자 레코드를 업데이트 할 수 있습니다.

+0

감사합니다. 우리의 오래된 시스템은 정품 인증을 위해 테이블에 부딪치지 않았으므로이를 피하려고했지만이 기능은 정상적으로 작동합니다. – chiliNUT

관련 문제