Hash e verifica delle password per il login degli utenti web

Tradotto automaticamente da Deepl

Lasicurezza sta diventando un argomento sempre più importante, dato che le applicazioni aziendali sono sempre più spesso accessibili attraverso il Web e, di conseguenza, sono più vulnerabili alle minacce. Poiché 4D presta molta attenzione alle questioni di sicurezza, in 4D v16 R5 sono stati apportati un paio di miglioramenti alla sicurezza, uno dei quali riguarda la protezione delle password degli utenti web attraverso l’hashing delle password.

A proposito, se volete saperne di più su come 4D vi aiuta a proteggere i vostri dati e la sicurezza in generale, vi consiglio di dare un’occhiata a questo post del blog.

Perché le password dovrebbero essere sottoposte a hashing?

Facciamo un esempio concreto: avete un’applicazione aziendale, con utenti che possono accedere inserendo nome e password in una finestra di dialogo. Una volta effettuato l’accesso, gli utenti ottengono “diritti extra”, come la lettura e la scrittura in altre tabelle o campi (ad esempio, il reparto Risorse Umane può accedere alla tabella degli stipendi dei dipendenti, ma non ai dipendenti stessi).

Il server deve quindi memorizzare “qualcosa” che possa essere utilizzato per verificare le password degli utenti. Il “qualcosa” più elementare è costituito dalle password stesse. Qualsiasi password non protetta salvata nel database potrebbe essere rubata e utilizzata per compromettere l’applicazione e i dati. Se si esegue l’hash delle password degli utenti prima di salvarle nel database, la password originale non può essere trovata o decifrata. Tuttavia, è possibile confrontare l’hash con la password originale per verificarne la validità.

Hash o crittografia?

La prima cosa da notare è che molte persone parlano di password criptate ma in realtà intendono password con hash.

La crittografia utilizza un algoritmo per codificare i dati che possono essere decodificati con una chiave per ottenere i dati originali. Nell’hashing, una volta che i dati sono stati codificati, non c’è modo di recuperare i dati originali. Pertanto, le password dovrebbero essere sottoposte a hashing e non a crittografia.

Una conseguenza dell’hashing delle password è che, poiché non si memorizzano le password stesse (ma solo un pezzo di dati sufficiente a verificare una password senza poterla recuperare), non si possono inviare le password agli utenti che le hanno dimenticate. Dovete invece selezionare una nuova password casuale per loro, o lasciare che siano loro a sceglierne una nuova.

Quale algoritmo per l’hashing?

Gli algoritmi come MD5 o SHA sono molto veloci, ma sono vulnerabili agli attacchi di forza bruta, di conseguenza non dovrebbero essere utilizzati per l’hashing delle password. L’algoritmo di bcrypt è lento per sua stessa concezione, ha lo scopo di essere lento, quindi è perfetto per l’hashing delle password. Per maggiori informazioni, vi consiglio di leggere l’articolo “Come memorizzare in modo sicuro una password” di Coda Hale.

Comandi per l’hash delle password

Sono stati creati due nuovi comandi per generare e verificare una password con hash. Questi comandi sono basati sull’algoritmo bcrypt.

  • Un nuovo utente crea il suo account con la password:“myPassword“. Ho generato l’hash della password con il comando new Generate password hash e poi ho salvato l’hash della password nel database.

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

  • Quando il mio utente tenta di connettersi, inserisce la sua password. Poi verifico la validità tra la password inserita dall’utente e la password hash salvata nel database con il comando new. Verify password hash comando.

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

// Compare the password to the hash password
If (Verify password hash($varPassword;[Utente]HashPassword))
SendToUser("Sei connesso. Benvenuto "+$varLogin+".")
Else
SendToUser("Hai inserito una password sbagliata.")
End if

Else
SendToUser("Hai inserito un login sbagliato.")
End if

Vanessa Talbot
- Product Owner - Vanessa Talbot è entrata a far parte del team di 4D Program nel giugno 2014. In qualità di Product Owner, è incaricata di scrivere le storie degli utenti e di tradurle in specifiche funzionali. Il suo ruolo è anche quello di assicurarsi che l'implementazione della funzionalità fornita soddisfi le esigenze del cliente. Ha lavorato sulla maggior parte delle nuove funzionalità di multi-threading preemptive e anche su un argomento molto complesso: la nuova architettura per le applicazioni con motore. Vanessa si è laureata presso Telecom Saint-Etienne. Ha iniziato la sua carriera presso il Criminal Research Institute come sviluppatrice per il dipartimento audiovisivo. Ha lavorato anche nei settori dei media e della medicina come esperta di supporto tecnico, produzione e documentazione di nuove funzionalità.