Sto producendo un modulo Perl che fornisce un'interfaccia OO per un'API di terze parti. Voglio acquisire e archiviare la password dell'utente in un formato crittografato prima che venga trasmessa all'API di terze parti. Il modulo è progettato per essere eseguito solo su sistemi basati su UNIX.Perl codifica password STDIN
Ho prodotto il seguente script che esegue la funzione di acquisizione: è corretto nel senso che memorizza solo la variabile password in un formato crittografato? Sono preoccupato che la password possa essere disponibile in memoria altrove (ad esempio sotto $ _ anche se $ _ è undef).
NB. Sto usando STDIN piuttosto che @ARGV con il presupposto che il sistema operativo non registra la voce o include la password nel nome del processo. Sto usando una regex sostitutiva piuttosto che chomp in modo che l'input non debba essere memorizzato in una variabile temporanea non crittografata. Suppongo anche che non sia possibile essere completamente sicuri nel senso che il software di acquisizione di input possa ancora catturare l'input dell'utente.
Grazie in anticipo
use strict;
use warnings;
use Crypt::CBC;
use 5.14.0;
print 'Please enter your password: ';
system('tty -echo');
my $key = Crypt::CBC->random_bytes(56);
my $iv = Crypt::CBC->random_bytes(8);
my $cipher = Crypt::CBC->new(-key => $key,
-cipher => 'Blowfish',
-salt => 1,
);
my $ciphertext = $cipher->encrypt(<STDIN> =~ s/\n$//r);
system('tty echo');
probabilmente dovresti controllare la lunghezza della password, e cosa significa '/ r' sta per? –
@mpapec '/ r' è una sostituzione non distruttiva introdotta in perl 5.14 (vedi perlop) - non modifica la stringa sul posto ma restituisce invece una copia modificata (funzione molto utile). – Xaerxess
Chi stai cercando di proteggere da questo? Se qualcuno può dare un'occhiata alla memoria del processo per leggere la password crittografata, si deve presumere che possano leggere anche la chiave e la fonte del programma. Leggere la password da stdin piuttosto che come argomento da riga di comando proteggerà dai browser casuali ed è probabilmente la migliore che ci si possa aspettare. –