Pergunta

Depois de usuário se inscrever e-mail para o meu site. Meu site irá gerar um email de confirmação e enviar para eles. No conteúdo de e-mail, eu preciso incluir chave de ativação, algo como:

www.domain.com/activate.php?key=$generatedKey

Como você gerar a chave? usando sha1 ($ email) ??

Depois de gerar a chave, eu armazená-lo em banco de dados, de modo que quando o usuário clicar no link posso verificou-se com o banco de dados ?? Eu sou novo para isso, por favor avise .. Eu preciso de um script de e-mail de confirmação ..

Foi útil?

Solução

Pessoalmente, apenas eu uso uma combinação de coisas como:

$generatedKey = sha1(mt_rand(10000,99999).time().$email);

A chance de colisão é pequena, mas eu recomendo verificar seu banco de dados antes de enviá-lo (usando restrições UNIQUE é uma maneira fácil).

Outras dicas

Você basicamente tem algumas opções:

1) Criar um único identificador único que é aparentemente aleatória e armazená-lo em seu banco de dados com qual nome de usuário que corresponde a

2) Gerar uma senha aleatória e incluir o ID de usuário e senha no link e armazenar a senha no banco de dados

3) Use uma função one-way hash (md5, sah1, etc) e um identificador secreta para criptografar o identificador do usuário. Você não tem para armazenar o identificador do usuário criptografada em seu banco de dados.

A opção 1 é difícil porque você tem que se preocupar sobre como verificar o banco de dados para ver se a chave já existe. No entanto, é bom que a URL não contém o nome de usuário que está sendo ativado.

Se você já está indo para usar algum tipo de banco de dados para armazenar as informações do usuário (provavelmente uma senha no mínimo) no futuro, você poderia ir com a opção 2. Não é preciso muito para adicionar outra coluna para o seu base de dados. Ao enviar o e-mail, salvar o nome de usuário e algo como US $ key = sha1 (rand (1, 99999). $ Username) em outra coluna para a linha que contém o nome de usuário. Então, o seu link parecido com este: http://you.com/activation.php?user= $ username & key = $ key. Em activation.php você verificar para ver se a chave é igual ao valor armazenado no banco de dados.

Se você quiser usar menos espaço de armazenamento em seu banco de dados, a opção 3 vai funcionar. Você pode usar algo como US $ key = sha1 ($ mysecret. $ Username) como o identificador secreto. Use algo estranho que só você sabe quanto $ mysecret como 'aaafj_my_secret_adfaf'. Use o mesmo tipo de URL como na opção 2. No entanto, porque você pode gerar $ key baseado apenas em $ username, você não precisa para armazená-lo. Então, quando você está processando em activation.php, basta verificar para ver se sha1 ($ mysecret. $ _GET [nome de usuário]) == $ _GET [chave]. Se isso acontecer, você sabe que tem o usuário correto. Teoricamente, com inscrições suficientes, alguém poderia descobrir o seu valor para US $ mysecret e gerar as chaves de ativação também. No entanto, você certamente notar os bilhões ou mais de inscrições que levaria antes que eles pudessem começar a calcular o que é. O número de ativações necessárias é baseado no tamanho da chave da função hash. Use sha1 (160 bit) vs md5 (128 bits) para torná-lo mais difícil de adivinhar o seu valor mysecret $.

$guid=md5(uniqid(mt_rand(), true));

Se você está armazenando a seqüência de ativação no banco de dados e verificando-lo mais tarde, você não precisa de um hash em tudo!

Você só precisa de um longo, seqüência aleatória. Você pode gerá-lo como quiser, apenas torná-lo muito tempo. Na verdade, ele deve, idealmente, ter nada que ver com o e-mail ou nome de usuário.

Isso deve fazê-lo, contudo, você pode melhorá-lo adicionando um pouco de sal, por exemplo:

$key = sha1($email . 'doYouLikeSauce');

Outra abordagem é apenas para gerar uma senha aleatória e enviá-lo via e-mail.

$code = md5($_POST['username'] . microtime()); 
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top