Sto pensando di creare una soluzione KeePass basata sul web in Symfony 3 (PHP) per avere la password sicura con poche altre funzionalità aggiunte. Voglio assicurarmi che non ci siano grossi problemi di sicurezza. Ecco le ipotesi:
- Server aziendale interno, servizio interno
- Il sito web funziona solo su HTTPS
- L'utente deve prima accedere (LDAP, la politica della password aziendale è abbastanza severa)
- Dopo l'accesso, l'utente deve immettere la password di crittografia che verrà utilizzata come chiave di crittografia dopo essere stata sottoposta a hash con SHA256 (hash ('sha256', $ key, true))
- La password di crittografia inserita viene verificata se valida confrontando un singolo valore decrittografato con un valore previsto noto
-
Metodi di crittografia / decrittografia, utilizzati per conservare / recuperare le password dal DB:
public function encrypt($openText) { $ivSize = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_CBC); $iv = mcrypt_create_iv($ivSize, MCRYPT_RAND); $encryptedPayload = mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $this->keyHash, $openText, MCRYPT_MODE_CBC, $iv); $encryptedBinary = $iv . $encryptedPayload; return $encryptedBinary; } public function decrypt($encryptedBinary) { $ivSize = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_CBC); $iv = substr($encryptedBinary, 0, $ivSize); $encryptedPayload = substr($encryptedBinary, $ivSize); $openText = rtrim(mcrypt_decrypt(MCRYPT_RIJNDAEL_256, $this->keyHash, $encryptedPayload, MCRYPT_MODE_CBC, $iv), "\x00"); return $openText; }
-
L'hash della chiave di crittografia viene mantenuto nella sessione utente
- La sessione utente scade dopo 120 secondi dall'ultima attività
- Le password non vengono mantenute nel codice HTML del sito Web - vengono letti dal server ogni volta che si utilizza AJAX su HTTPS, si inserisce temporaneamente l'attributo dell'elemento HTML da copiare da JS e quindi l'attributo viene rimosso
- Le password vengono copiate negli appunti utilizzando clipboard.js
- Gli Appunti vengono cancellati (copiando la stringa vuota) dopo 15 secondi
Vedi qualche problema di sicurezza qui (considerando la progettazione webapp, rispetto a KeePass)? A cosa dovrei prestare particolare attenzione?