passaggio dell'input dell'utente alla riga di comando

0

Sto usando crack lib per controllare la forza della password per la mia applicazione web. Tuttavia, sono preoccupato che la mia attuale implementazione sia sicura o meno.

L'utente inserisce una password, che viene quindi eseguita attraverso il seguente codice node.js:

      var checkPassword = exec('echo "'+password+ '"| cracklib-check\n', function(err, stdout, stderr) {
     if (stderr) {
        reject(stderr);
     } else if (err) {
        reject(err);
     } else if (stdout) {
        resolve(stdout);            
     } else {
        reject('Password Validation Failed');
     }
  });

perché la password è concatenata nel comando, sembra un attacco il più possibile, un po 'come l'iniezione SQL. Questo approccio è sicuro e, in caso negativo, come lo risolvo? Se fossi in una lista nera di virgolette doppie, eviterei tutti i potenziali problemi?

    
posta PunDefeated 27.10.2016 - 01:31
fonte

1 risposta

1

because the password is being concatenated into the command, it seems like an attack as possible, Kind of like SQL injection.

In effetti, è molto facile eseguire un attacco "; rm -rf / ;" -type.

If I were to blacklist double quotes, would that avoid all potential issues?

È lontano più sicuro per evitare di passare i comandi attraverso una shell. Dovresti invece utilizzare la famiglia di funzioni exec (o meglio, un involucro appropriato attorno a loro nella tua lingua preferita), dove passi un comando pre-analizzato; questo è molto più sicuro che tentare di implementare una shell citando la lista nera. La maggior parte dei wrapper della lingua fornirà anche un modo semplice per passare stdin al comando, che è l'unica cosa per cui usi più processi e una pipeline.

Hai ancora bisogno di prendere in considerazione altre possibilità di attacco (ad esempio, cracklib-check consuma molte risorse quando hai passato una stringa molto lunga? Quindi ti sei aperto ad un attacco Denial of Service classico), ma eviterà almeno i buchi del tipo a iniezione.

    
risposta data 27.10.2016 - 22:43
fonte

Leggi altre domande sui tag