Configurazione
Un server che esegue un database PostgreSQL e un Apache con diverse applicazioni php. L'accesso a db avviene tramite l'interfaccia di loopback. Il db contiene una tabella con lo username e l'hash della password SHA-512-CRYPT ( $6$salt$hash
).
Soluzione comune
Le applicazioni leggono la password dall'utente, la cancellano e fanno un confronto tra stringhe sul database. Se le stringhe corrispondono, l'utente è autenticato.
La mia soluzione
Il database ha una funzione memorizzata (o istruzione preparata?) check_password(user, password)
che le applicazioni php interrogano con SQL. Quindi inviano l'utente e la password in chiaro e interpretano la risposta di db (ad esempio, righe restituite). Questo ha il vantaggio che non devo assicurarmi che tutte le applicazioni supportino lo stesso algoritmo di hash sicuro e che io possa incapsulare l'autenticazione in un singolo posto nel db. Lo stesso potrebbe essere fatto per le modifiche della password update_password(user, old_password, new_password)
.
Vi sono alcuni svantaggi in questa soluzione?
EDIT: aggiunto chiarimento sul formato della password memorizzata.