Sicuramente è una buona idea passare a un algoritmo hash più sicuro. C'è una funzione password_hash() è possibile utilizzare per la creazione di un hash bcrypt:
// Hash a new password for storing in the database.
// The function automatically generates a cryptographically safe salt.
$hashToStoreInDb = password_hash($password, PASSWORD_DEFAULT);
// Check if the hash of the entered login password, matches the stored hash.
// The salt and the cost factor will be extracted from $existingHashFromDb.
$isPasswordCorrect = password_verify($password, $existingHashFromDb);
Dalla tua risposta credo che si è utilizzato un valore MD5 non salato, in modo doppio hashing può essere una buona soluzione qui. Basta passare l'hash MD5 alla funzione password_hash(), genererà un sale sicuro da solo.
// Migrating the old MD5 hashes to MD5-BCrypt
$hashToStoreInDb = password_hash($existingMd5Hash, PASSWORD_DEFAULT);
Per la verifica prima check for a double hash, e quindi verificare la password di conseguenza.
if (checkIfDoubleHash($existingHashFromDb))
{
$isPasswordCorrect = password_verify(MD5($password), $existingHashFromDb);
// Update database with pure BCrypt hash
if ($isPasswordCorrect)
$hashToStoreInDb = password_hash($password, PASSWORD_DEFAULT);
}
else
{
$isPasswordCorrect = password_verify($password, $existingHashFromDb)
}
Gli hash memorizzati possono essere riconosciuti dal leader $ o da un campo db separata, un hash bcrypt per esempio inizia sempre con un carattere $, un hash MD5 non lo fa.
Un sale dovrebbe non essere trascurato da altri parametri e dovrebbe essere univoco per password. La funzione password_hash() si prenderà cura di questo. Poiché un arcobaleno deve essere costruito prima di ogni sale, un attaccante dovrebbe costruire un arcobaleno per ogni password. Per ulteriori informazioni è possibile dare un'occhiata al mio tutorial su secure password storing.
Si prega di spiegare il downvote – merlinbeard
Questa sarebbe una soluzione migliore su [security.se], ma controllate il loro centro assistenza prima di postare. –
Controlla 'password_hash()' http://php.net/manual/en/function.password-hash.php – timgavin