Hash and verify passwords for web user login

Tradução automática de Deepl

A segurança está a tornar-se um tópico cada vez mais importante à medida que as aplicações empresariais se tornam mais frequentemente acessíveis através da web e, como resultado, são mais vulneráveis a ameaças. Como a 4D está a prestar muita atenção às questões de segurança, em 4D v16 R5 estamos a fornecer-lhe algumas melhorias de segurança, e uma delas está relacionada com a protecção da palavra-passe dos utilizadores da web através do hashing da palavra-passe.

A propósito, se quiser saber mais sobre como a 4D o está a ajudar a proteger os seus dados e com a segurança em geral, recomendo-lhe que dê uma vista de olhos neste post do blogue.

Porquê hashing das palavras-passe?

Tomemos um exemplo concreto – tem uma aplicação comercial, com utilizadores que podem iniciar sessão introduzindo o seu nome e palavra-passe num diálogo. Uma vez iniciada a sessão, os utilizadores ganham “direitos extra”, como ler e escrever noutras tabelas ou campos (por exemplo, o departamento de Recursos Humanos pode aceder à tabela de salários dos funcionários, mas não os próprios funcionários).

O servidor deve então armazenar “algo” que pode ser utilizado para verificar as palavras-passe dos utilizadores. O “algo” mais básico consiste nas próprias palavras-passe. Qualquer palavra-passe não segura guardada na sua base de dados pode ser roubada e utilizada para comprometer a sua aplicação e os seus dados. Se tiver as senhas dos seus utilizadores antes de as guardar na sua base de dados, a senha original não poderá ser encontrada ou desencriptada. Mas, ainda pode comparar o hash com a palavra-passe original para verificar a sua validade.

Hash ou Encrypt?

A primeira coisa a notar é que há muitas pessoas que falam de palavras-passe encriptadas mas que realmente significam palavras-passe encriptadas em hash.

A encriptação utiliza um algoritmo para codificar dados que podem ser desencriptados por uma chave para obter os dados originais de volta. No hashing, uma vez codificados os dados, não há forma de recuperar os dados originais. Assim, as palavras-passe devem ser encriptadas em hash e não encriptadas.

Uma consequência do hashing de senhas é que, uma vez que não se armazenam as próprias senhas (mas apenas um pedaço de dados que é suficiente para verificar uma senha sem poder recuperá-la), não se pode devolver as suas senhas a utilizadores que as tenham esquecido. Em vez disso, deve seleccionar uma nova palavra-passe aleatória para eles, ou deixá-los escolher uma nova palavra-passe.

Que algoritmo de hashing?

Os algoritmos como MD5 ou SHA são muito rápidos e depois são vulneráveis a ataques de força bruta, como consequência não devem ser utilizados para hash de palavras-passe. O algoritmo bcrypt é lento por concepção, pretende ser lento, por isso é perfeito para o hashing de palavra-passe. Para mais informações, aconselho a leitura do artigo “Como guardar uma palavra-passe em segurança” de Coda Hale.

Comandos para palavras-passe de hash

Dois novos comandos foram criados para gerar e verificar uma palavra-passe de hashed. Estes comandos são baseados no algoritmo bcrypt.

  • Um novo utilizador cria a sua conta com a palavra-passe:“myPassword“. Gero a palavra-passe hash com a nova Generate password hash e depois guardei a palavra-chave hash na base de dados.

$varHash:=Generate password hash("myPassword")
[Utilizador]Login:=$varLogin
[Utilizador]HashPassword:=$varHash

SAVE RECORD ([Utilizador])

  • Quando o meu utilizador tenta ligar-se, ele introduz a sua palavra-passe. Depois verifico a validade entre a senha introduzida pelo utilizador e a senha hash armazenada na base de dados com o novo comando Verify password hash comando.

C_TEXT($varLogin;$varPassword) // information entered by user
QUERY ([Utilizador];[Utilizador]Login;=;$varLogin)
If (Records in selection([Utilizador])=1)

// Compare the password to the hash password
If (Verify password hash(
($varPassword;[Utilizador]HashPassword)) SendToUser("Você está ligado. Bem-vindo "+$varLogin+"
.")
Else
SendToUser("Introduziu uma palavra-passe errada")
End if

Else
SendToUser("Introduziu uma palavra-passe errada").
End if

Vanessa Talbot
• Proprietário do produto - Vanessa Talbot entrou ao time 4D Program em Junho de 2014 como Proprietária do Produto e está a cargo de escrever as histórias dos usuários e depois traduzi-las em especificações funcionais. Seu papel também é garantir que a implementação da funcionalidade entregue cumpra com as necessidades do cliente. Desde sua chegada, trabalhou na definição de funcionalidades chaves em 4D. Trabalhou na maioria das novas funcionalidades multithread preemptivo e também em um tema muito complexo: a nova arquitetura para a aplicação engined. Vanessa é formada pela Telecom Saint-Etienne. Começou sua carreira no Instituto de Investigação Criminal como desenvolvedora do departamento audiovisual. Também trabalhou em meios de comunicação e no âmbito médico como especialista em assistência técnica, produção e documentação de novas funcionalidades.