Pergunta

Duplicate possíveis:
Esqueceu a senha: o que é a melhor método de implementar uma função esqueceu a senha?

Eu estou programando um site da comunidade.

Eu quero construir um "esqueci minha senha" recurso.

Olhando em volta em locais diferentes, eu encontrei eles empregam um dos três opções :

  1. enviar ao usuário uma e-mail com um link para um único, escondido URL que lhe permite alterar a sua password (Gmail e Amazon)

  2. enviar ao usuário um e-mail com um , nova senha gerada aleatoriamente (Wordpress)

  3. enviar o usuário sua senha atual (www.teach12.com)

Opção # 3 parece ser o mais conveniente para o usuário, mas desde que eu salvar senhas como um hash MD5, eu não vejo como opção # 3 estaria disponível para mim desde que MD5 é irreversível . Isso também parece ser insegura opção, uma vez que significa que o site deve estar salvando a senha em algum lugar texto claro e, ao menos a senha de texto claro está sendo enviada através insegura e-mail para o usuário . Ou estou faltando alguma coisa aqui?

Então, se eu não posso fazer a opção # 1, Opção # 2 parece ser o simples de programa desde que eu só tenho que mudar a senha do usuário e enviá-lo para ele. Embora este seja um pouco insegura desde que você tem que ter uma senha ao vivo a ser comunicada através insegura e-mail. No entanto, isso também poderia ser mal utilizado por problemas decisores aos usuários Pester , digitando e-mails aleatórios e em constante alteração de senhas de vários usuários.

Opção # 1 parece ser o mais segura , mas requer um pouco de programação extra para lidar com um URL oculto que expira etc., mas parece ser o que o grandes sites usam.

Que experiência você teve usando / programar essas várias opções? Existem as opções que eu perdi?

Foi útil?

Solução

4) Creditar a sua conta bancária com dois montantes aleatórios e pedir-lhes para entrar aqueles em.
5) Snail Mail-lhes alguma nova senha e pedir-lhes para inseri-lo no.
6) Peça-lhes texto ou chamar um número e digite algum valor para um número de telefone com o telefone móvel que registrado em arquivo.
7) Saia do problema de gerenciamento de senha por completo, a terceirização para prestadores de OpenID como Stack Overflow, Facebook, motores de blog, e outros estão começando a fazer.

Fora desses, use a opção # 1 ou # 2 com o recurso adicional que tanto expirar em uma hora.

Outras dicas

Estou chocado com as upvotes nas respostas descrevendo # 1 e # 2 como equivalente. Eles não são de todo. Enviando ao usuário um link curto prazo para alterar sua senha é a abordagem mais conveniente, mais comumente usado e mais seguro que não envolve um fora de interação banda (e-mail, msg de texto, etc.). A alguns motivos:

  1. A definição de uma senha temporária através de um link de senha esqueceu permite que os usuários efetivamente mudar a senha do usuário e bloquear um usuário fora de sua conta se eles sabem de login do usuário. Com um link, o usuário simplesmente sabe que alguém está brincando e seu acesso não é afetado.
  2. O link de redefinição de senha é válida apenas por um período curto, então não há uma janela muito pequena para um atacante para atacar. E mesmo se o fizessem, o usuário saberia porque o link de redefinição deixam de funcionar se o atacante interceptado a ligação e é usado para alterar a senha. Se a nova senha atribuída não é alterado pelo usuário imediatamente, o invasor que interceptado a senha pode tranquilamente representar o usuário indefinidamente . Assim, a grande diferença é que, enquanto um hacker pode interceptar o link de redefinição de senha e-mail, se use o link para alterar a senha do usuário, o usuário saberá que algo está errado porque o link não funcionará e eles vão gerar um outro pedido de redefinição de senha.
  3. Mais fácil de usar -. O usuário simplesmente clica em um link em seu e-mail ao invés de digitar uma nova senha aleatória que você gerou
perguntas

e segurança, muitas vezes fazer um site menos seguro, não mais - são outro vetor de ataque e muitas vezes o elo mais fraco. Eu recomendo a leitura do o aplicativo da Web Hacker Handbook para uma excelente discussão sobre este tema.

Note que a opção # 2 também requer que você mantenha o controle da senha antiga e expirar a nova senha aleatória se não for usado dentro de, digamos, 24 horas.

Caso contrário, eu poderia irritá-lo por várias vezes a emissão de uma nova senha aleatória -. Se você não está perto de seu e-mail que você pode não saber por que você não pode fazer login com a sua senha normal

Além disso, por favor evitar exigindo uma "questão de identificação". As respostas a estas perguntas são normalmente muito mais fácil de adivinhar / pesquisa de senhas reais - para que todos possam identificar-se como eu. Veja a história do Sarah Palin para um exemplo recente de como inseguro é este.

Opções 1 e 2 tão inseguro quanto o outro.

There. Eu disse isso. Se a conta de e-mail do usuário foi violada, não há nenhuma maneira segura razoável para fazer as coisas a menos que você coletar dados mais privadas, como seu endereço, nome de solteira da mãe -. Todos os quais podem ser adivinhadas

A melhor (embora mais irritante) versão que tenho visto é onde você precisa se lembrar de uma pergunta secreta e a resposta secreta. Isso significa que o usuário tem que lembrar que pergunta que fizeram, o que, é claro, sempre se pode esquecer também!

Se esquecer a pergunta e você é uma empresa "real", há sempre a opção de enviar o usuário uma ficha pelo correio, com instruções sobre como redefinir toda a sua segurança ... É muito improvável que um hacker terá acesso a seus e-mails vida real.

A inclinação em que seria coletar um número de telefone quando o usuário criou a conta. Se isso existiu e que não se lembrava de nenhum de seus detalhes, você pode configurar algum tipo de sistema de chamada automatizado que lhes disse como repor os seus detalhes.

E uma coisa para falar sobre # 2: Não deixe que o processo de substituição a senha da conta corrente. Se isso ninguém aconteceu poderia dizer que esqueceu a senha de qualquer conta, provocando muitas alterações de senha indesejados.

Não há nenhuma diferença real entre a segurança da opção 1 ou 2. A opção 1 é efetivamente o mesmo que o pré-carregamento a nova senha no formulário.

Na verdade, com a prevalência de ataques de phishing, pode-se argumentar que encorajar o uso da opção 1 com URLs longas podem tornar as pessoas menos alerta sobre clicar em URLs longo misteriosas.

Leia a OWASP top ten para se certificar que seu método é compatível.

Aqui é a ligação direta.

Apenas uma nota rápida em algo não especificamente no que diz respeito à sua pergunta. Você mencionou que você usou MD5 para hash armazenado senhas. Independentemente de você optar por usar as opções 1 ou 2 (3 vai ser o menos seguro como, por razões óbvias), MD5 é um rachado algoritmo de hash, e pode realmente torná-lo relativamente fácil para hackers para obter acesso a contas protegidas por hash MD5.

Você pode ler mais sobre a vulnerabilidade-lo no seguinte URL: en.wikipedia.org/wiki/MD5

Uma solução melhor hash seria algo como SHA, que ainda é um estável e algoritmo de hash seguro. Combinado com a opção # 1 ou # 2, você deve ter um sistema razoavelmente segura para proteger suas senhas de usuários, barrando todos, mas o mais determinados hackers.

Opção # 1 é provavelmente o melhor. # 3 é inseguro (e eu também sugerem o uso de algo mais forte do que MD5, como SHA1). Opção # 2 não é bom porque permite que qualquer pessoa aleatória para trancá-lo fora de sua conta até que você verifique seu e-mail, a menos que você use uma pergunta de segurança. E as questões de segurança são muitas vezes mais fácil de quebrar do que senhas.

Opção # 1 tem um casal de grandes vantagens sobre # 2. Se um aleatórias usuário digita o meu endereço de e-mail na caixa de "Esqueci minha senha", então minha senha não será reiniciado. Além disso, é um pouco mais seguro em que não há registro permanente de senha do site armazenado em sua caixa de entrada do Gmail para sempre.

A peça que falta crítica aqui é que o link que você fornecer no nº 1 só deve trabalhar para uma redefinição de senha e ter um limite de tempo

Todas essas soluções significa que você está tratando sua caixa de entrada de e-mail como "um anel" que lhes todas as regras. A maioria dos serviços online parecem estar fazendo isso agora dias de qualquer maneira.

A minha abordagem preferida é ir com OpenID sempre que possível. gerenciamento de senhas é o inferno que ninguém parece ficar muito bem. É mais fácil entregar este problema para outra pessoa.

Opção 4: Requerer que o usuário de redefinição de senha, digitando o nome da conta e endereço de e-mail. Contanto que você não está divulgando nomes reais ou endereços de e-mail no site (PORQUE você neste dia e idade?), Este é um método razoavelmente seguro e à prova de falsificação. Enviar um link para uma página de reset, não a senha em si.

Opção 5:. Use OpenID e passar a responsabilidade a um 3-parte se preocupar com isso

Honestamente este é um esforço muito mais do que a maioria dos sites exigem. Eu, pelo menos como receber senhas em texto puro por e-mail porque eu armazená-los em uma pasta "registros" em minha caixa de entrada. Dessa forma eu posso pesquisar senhas para sites quando eu esquecê-los (o que acontece muito!). Se alguém está lendo o meu e-mail eu tenho problemas maiores para se preocupar do que as pessoas que utilizam a minha conta no Twitter (se eu tivesse um). De bancos e corporações do curso têm exigências mais fortes, mas você não especificou o que seu site é. Essa é a chave para a melhor resposta.

Eu concordo com seus comentários sobre a opção # 3 sendo inseguro.

Como para a programação seja # 1 ou # 2, opção # 2 é mais fácil de programa, mas # 1 não é muito mais difícil e ambos são provavelmente tão seguro quanto o outro.

Independentemente da opção escolhida, você pode também considerar tornando-a mais segura, incluindo solicitações de informações pessoais (que você obter durante o registro) como parte do processo de senha esquecida.

Eu programei sistemas onde você tem um nome de usuário e para obter uma nova senha você tem que digitar tanto o seu nome de usuário e seu endereço de e-mail. Você pode obter enviado um lembrete de seu nome de usuário, mas o ponto principal é que alguém provavelmente não será capaz de adivinhar seu nome de usuário e seu e-mail, mas se você fazê-lo apenas em e-mail, há menos seguro.

perguntas secretas são uma abordagem para a parte de informações pessoais. Eu, pessoalmente, acho que eles não oferecem muito valor como as pessoas tendem a escolher as perguntas que muitas pessoas vão quer saber a resposta, ser capaz de adivinhar ou ser capaz de descobrir. É melhor do que nada no entanto, desde que você usá-lo em conjunto com um método já relativamente seguro.

Obviamente, quanto mais deste que você faz, o trabalho mais programação é.

O método mais simples é:

  1. Tenha um link "lembrar-me do meu nome de usuário" (inserir e-mail). Não diga que o usuário se um email foi enviado ou não, porque as pessoas podem usar isso para descobrir se um endereço de e-mail é de um membro. Sempre diga ao usuário verificar sua caixa de entrada para o e-mail lembrete mas apenas enviá-lo se alguém é membro; e
  2. requerem nome de usuário e e-mail para obter enviado uma nova senha em tempo um. Essa senha deve durar apenas uma hora ou assim. Quando o usuário utiliza-lo, eles devem ser forçados a mudar sua senha imediatamente.

Qualquer opção 1 ou 2 seria ótimo. Como você disse, a opção 3 é inseguro quanto seria necessário para armazenar o texto claro senha. Você provavelmente poderia começar a fantasia e usar um algoritmo de criptografia reversível para armazenar / recuperar a senha, mas com melhores alternativas disponíveis para você Não há nenhuma razão para ir por esse caminho.

There is an additional option that you can use in combination with any of the options that you mention:

You can let the user write a reminder for their password, that you send to them as the first step when they have forgotten the password. If the reminder doesn't help the user, you can go on to the next option.

As the reminder isn't the password itself, it's safe to send by mail (or perhaps even display directly on the page).

If you are hashing them Option 3 is unavailable and if you are not hashing them, shame on you. :)

I prefer option 1, sending a reset password link sent to their email which allows them (for a limited time) to reset their password. It does require more work, but it's easy for them to use and ultimately as secure as their email login process.

You could made a mix between #1 and #2, taking advantages from both:

Send the user an email with a link to a unique, hidden URL that allows him to change a new randomly generated password.

That page could be SSL, and the password could expire in 12-24 hours.

I've tried a couple of methods that I've not really been happy with. What I've settled on for the next project is to:

  1. User enters username and email address
  2. Email sent with link containing url and guid param which has been stored in db with 48 hour expiry
  3. User confirms password to be reset
  4. New password is emailed to user
  5. Login with new password displays message or redirects to change password page.

Instruct the user come personally to your offices and prove her identity with id card or passport.

This, of course, assumes that you have offices near your users and that the account are valuable enough to justify this procedure. Suitable for example banks.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top