Dopo un aggiornamento a php7, il BCryptPasswordEncoder genera il seguente errore, ad es. al momento della registrazione quando si utilizza FOSUserBundle pagina di registrazione di serie:FOSUserBundle BCryptPasswordEncoder salatura
"Uso dell'opzione 'sale' a password_hash è deprecato in C: \ xampp \ htdocs \ ascentary \ vendor \ symfony \ symfony \ src \ Symfony \ Component \ linea di sicurezza \ core \ Encoder \ BCryptPasswordEncoder.php 81 "in C:. \ xampp \ htdocs \ TestProject \ vendor \ Behat \ Behat \ src \ Behat \ testwork \ chiamata \ Handler \ RuntimeCallHandler"
I' Ho rintracciato questo problema e il problema è la classe FOS UserManager, che chiama:
/**
* {@inheritDoc}
*/
public function updatePassword(UserInterface $user)
{
if (0 !== strlen($password = $user->getPlainPassword())) {
$encoder = $this->getEncoder($user);
$user->setPassword($encoder->encodePassword($password, $user->getSalt()));
$user->eraseCredentials();
}
}
Passando qui $ user-> getSalt() genera l'errore, perché su php7, non è più consentito passare una sessione personalizzata di sale alla funzione bcrypt encoding/password_hash. Inoltre, vedo un problema nell'entità utente fos di base, in quanto nel suo costruttore, il sale è impostato come:
$this->salt = base_convert(sha1(uniqid(mt_rand(), true)), 16, 36);
Domande:
(1) Come risolvere l'errore che ho postato sopra? Forse sovrascrivendo UserManager o esiste una soluzione fornita da fos?
(2) Come proteggere correttamente il sale, che viene generato automaticamente?
(3) Sono necessari altri aggiornamenti, come l'aggiornamento di ircmaxell lib?
[bcrypt non è un algoritmo di crittografia] (https : //paragonie.com/blog/2015/08/you-wouldnt-base64-a-password-cryptography-decoded) –
Grazie, bel articolo! – user3746259