Metodi Per Criptare La Password

Una volta creato il mio primo login, fiero e felice, mi son reso conto che ho la password bella chiara… al posto del varchar ancora dovrei mettergli qualcosa di più appropriato.

non so che cosa utilizzare su questa piattaforma, voi cosa mi suggerite?

md5 ? sha256/512 + salt ? altri metodi?

ho trovato qualcosa in inglese ma di post vecchi, di oltre 4 anni, non so se fidarmi… daltronde il md5 forse non è più tanto sicuro al giorno d’oggi…

Yii già propone soluzioni valide:

Yii 1: http://www.yiiframework.com/wiki/425

Yii 2: http://www.yiiframework.com/doc-2.0/guide-security.html

A meno che tu non abbia esigenze molto particolari dovresti essere già a posto così!

ciao

noi usiamo crypt con salt

per esigenze legali dobbiamo dimostrare di non essere in grado di risalire alla password dell’utente, per cui NON la memorizziamo, usiamo la password stessa come salt e quindi ci applichiamo crypt sopra.

ok grazie per le dritte, ora me li studio bene :)

domanda…

per creare la password nel db ho eseguito questo codice:

$salt = Yii::app()->getSecurityManager()->generateRandomBytes(‘22’);

$salt = ‘$2a$%13$’ . strtr($salt, array(’_’ => ‘.’, ‘~’ => ‘/’));

$password = crypt($this->password, $salt);

ho usato generateRandomBytes perchè openssl_random_pseudo_bytes non veniva riconosciuta (probabilmente dovevo attivare qualche libreria) ma ho letto che era consigliabile usare appunto quest’altra

successivamente, per loggare appunto:

            if ($password === crypt($this->password, $password))


            #la password è corretta

il punto è che ho notato che la password è riconosciuta valida già digitando i 2/3…

per dire, se la password fosse bluewolf…

scrivendo bluewol, bluewolf, bluewolf24, per lui va sempre bene, e mi fa loggare…

secondo voi dove posso aver sbagliato?

edit:

ok ho risolto.

scusatemi, riprendo questo topic perchè a quanto pare la cosa che pensavo aver chiara, in realtà funziona per qualche strano motivo, nel login, ma non son riuscito più a riproporla sul sito.

In particolare ho una maschera, per la gestione di collaboratori, in cui si possono aggiungere/modificare/eliminare collaboratori. Il problema è che il cambio di password, col classico:

vecchia password

nuova password — ripeti password

non riesco a farlo funzionare, la vecchia password non riesce a riconoscerla e quindi sbaglio senza dubbio il crypting.

La cosa che non capisco è com’è possibile che nel login mi funzioni e qui no.

Il codice è questo:




        public function verifica_oldPassword()

        {

            $load=AnagraficaUtenti::model()->findByPk(array("id_azienda"=>$this->id_azienda,"id_operatore"=>$this->id_operatore));

            if ($load)

            {   #quindi esiste l'utente

                if ($load->password === crypt($this->vecchia_password, $load->password))

                        return true;#la password corrisponde

                else

                    $this->addError('vecchia_password','La password non coincide');

            }

            else #l'utente non esiste

                return true;

            return false;

        }




nella registrazione funziona cosi:




        public function registra()

        {

            #alex_key è la chiave di cifratura del mio script

            $alex_key=*********  

            $salt=Yii::app()->getSecurityManager()->generateRandomBytes('22');

            $salt = '$5$'.$alex_key. strtr($salt, array('_' => '.', '~' => '/'));

            $password = crypt($this->password, $salt);



e ottenuta la password la registro come varchar64 ovviamente.

L’assurdo appunto è che la logica funziona sul login, usando userIdentity opportunamente modificato, ma in questa maschera che ho creato mi dice puntualmente che la password non coincide.

giusto per chiudere la storia, ho scoperto che il codice non andava e basta.

con salt $2a$, nei link citati precedentemente, la password veniva riconosciuta già conoscendo i primi 8 caratteri, o qualcosa di simile, per cui non andava bene

ho scoperto che $5$ nel salt serviva per usare lo sha256, e stranamente mi funzionava nel login, per poi scoprire che è stato 1 caso irripetibile…

alla fine ho usato questa soluzione:

http://www.yiiframework.com/doc/api/1.1/CPasswordHelper