Login Site: como deve credenciais do usuário ser enviado para o servidor para verificação?

votos
3

Eu estou trabalhando em um projeto no qual os clientes remotos precisa fazer login para um servidor web. Eu não estou olhando para exemplos em qualquer língua particular; apenas uma ideia geral dos problemas de segurança envolvidos.

A questão básica é:
Como devem as credenciais do usuário ser passados para um servidor web para verificação?

Eu estou imaginando o seu login típico website. Um campo para o nome de usuário e outra para senha. Você digita em ambos e clique em Entrar. O que acontece depois?

Posso imaginar alguns cenários:

  1. As credenciais são enviadas para o servidor como texto simples. Um script do lado do servidor cria um hash da senha e compara com o hash armazenado para o usuário.
  2. As credenciais são criptografadas localmente, eo resultado é enviado para o servidor. O servidor decifra as credenciais e continua como em # 1
  3. Algo que eu não tenha pensado ainda? Eu sou novo para isso. Vai com calma comigo!

Opção # 1 me parece fraco porque as credenciais são enviadas através da Internet em texto simples.

Eu vejo a opção # 2 como não muito melhor do que a opção # 1. Se alguém interceptar as credenciais criptografadas, pode não apenas enviar os para o servidor outra vez, e ainda conseguem entrar no fórum?

Qualquer visão é apreciado.

edit: o quadro relacionadas sugere esta pergunta , que menciona um aperto de mão cliente / servidor com um sal adicionado à senha. É esse o caminho certo a seguir?

Publicado 19/05/2009 em 21:46
fonte usuário
Em outras línguas...                            


5 respostas

votos
4

Opção 1 é de longe o padrão. A fraqueza texto simples geralmente é superado pela aplicação SSL durante o login para que a senha é, pelo menos criptografados durante o trânsito.

Edit: Eu sugiro que você siga a resposta aceitos para essa pergunta.

Não se esqueça de exigir um nonce para o seu pedido. Isso ajudará a protegê-lo contra ataques de repetição.

Editar o segundo: Wayne cuidadosamente mencionou que você deve sal sua senha antes de hash. Aqui estão algumas dicas básicas:

  1. Não importa se o seu sal é um prefixo, postfix, ou infix
  2. Seu sal deve ser grande, aleatório, e complexo.
  3. Seu sal deve ser único por valor salgada. O sal em si não precisa ser criptografados.
Respondeu 19/05/2009 em 21:52
fonte usuário

votos
3

Por que não SSL comunicações? Ser capaz de observar a conversa me dá uma visão sobre a sua aplicação. Criptografar toda a comunicação, não apenas as credenciais.

Editar: Utilize sempre sal para um hash armazenado localmente. O Windows continua a falhar, tanto quanto força bruta senhas hash localmente porque não sal por padrão.

Respondeu 19/05/2009 em 21:53
fonte usuário

votos
1

A resposta mais simples é obter um certificado SSL para o servidor. Não há realmente nenhuma razão para mexer com a criação de suas próprias técnicas de criptografia nesta aplicação particular. Como você observou, se a conexão não é criptografada, você se mantém aberto para man-in-the-middle, independentemente do cliente ou o servidor está fazendo a criptografia de senha. Criptografar a conexão, e você não tem que se preocupar com isso.

Respondeu 19/05/2009 em 21:57
fonte usuário

votos
0

Você também pode querer considerar o uso de múltiplas iterações do algoritmo de hash, 1000 iterações irá retardar as coisas bem e fazer tabelas do arco-íris que muito mais difícil de criar

Respondeu 21/05/2009 em 20:16
fonte usuário

votos
0

No lado do cliente que você só tem um navegador que pode render HTML e enviar formulários. Quem é o material criptografar vai?

Enviar login e senha em texto simples (SSL-lo se você tiver preocupações). No lado do servidor, você pode fazer o que quiser com ele (hash de preferência e senha sal antes de armazená-los no banco de dados).

Respondeu 19/05/2009 em 21:54
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more