Mysql
 sql >> Database >  >> RDS >> Mysql

Perché mysqli_connect() deve ricevere il parametro password senza crittografia?

Come utente non sai come viene crittografata la password (in realtà non è affatto crittografata, ma con hash).

Basta passare la password e MySQL può eseguire lo stesso hashing della password originale e confrontarla con ciò che è archiviato. Se si passa la versione hash, l'intero vantaggio dell'hashing è svanito:se qualcuno ottiene gli hash dal server, può semplicemente usarli per accedere come se fossero normali password. L'hash è quindi diventato la password.

Il vantaggio aggiuntivo è che MySQL, poiché ha la password originale, potrebbe ri-hash con un algoritmo migliore, aggiungere un po' di sale e memorizzare quella versione migliorata. Se non ottiene mai l'originale, non è possibile. Funzioni password di PHP supporta anche questo. Puoi controllare con password_needs_rehash se una password con hash è ancora correttamente sottoposta a hash e aggiorna il database se non lo è.

Quindi, per sicurezza, dovrai prendere altre misure. Questi sono almeno:

  • Memorizza la password in un file di inclusione che risiede al di fuori della radice del documento. In questo modo, nessuno può aprire direttamente quel file.
  • Puoi impedire che i file di inclusione vengano aperti senza essere inclusi (ad esempio controllando una definizione che è stata impostata in index.php). È bello, ma se PHP fallisce a causa di un errore di configurazione, le persone possono semplicemente sfogliare l'origine del file, quindi attenersi alla regola precedente.
  • Crea sempre un utente del database speciale. Non usare root . Concedi a questo utente quanto basta per far funzionare il database, ma non di più. Nessun diritto per eliminare le tabelle, ad esempio.
  • Dai sempre a quell'utente una password univoca. Non è necessario ricordare questa password. Genera semplicemente spazzatura casuale con molti personaggi.
  • Cambia la password regolarmente. Forse potresti anche scriverlo e memorizzare la password aggiornata nella configurazione.