pasando la entrada del usuario a la línea de comando

0

Estoy usando crack lib para comprobar la seguridad de la contraseña para mi aplicación web. Sin embargo, me preocupa si mi implementación actual es segura o no.

El usuario ingresa una contraseña, que luego se ejecuta a través del siguiente código de 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');
     }
  });

debido a que la contraseña se está concatenando en el comando, parece un ataque como posible, algo así como la inyección de SQL. ¿Es este enfoque seguro y, de no ser así, cómo lo arreglo? Si tuviera que poner en una lista negra las comillas dobles, ¿eso evitaría todos los problemas potenciales?

    
pregunta PunDefeated 27.10.2016 - 01:31
fuente

1 respuesta

1
  

debido a que la contraseña se está concatenando en el comando, parece un ataque como posible, algo así como la inyección de SQL.

De hecho, es muy fácil realizar un ataque de tipo "; rm -rf / ;" .

  

Si tuviera que poner en una lista negra las comillas dobles, ¿eso evitaría todos los problemas potenciales?

Es mucho más seguro para evitar pasar los comandos a través de un shell. En su lugar, debería utilizar la familia de funciones exec (o, más bien, un envoltorio apropiado a su alrededor en el idioma de su elección), donde pasa un comando previamente analizado; esto es mucho más seguro que intentar implementar una lista negra de citas de shell. La mayoría de los envoltorios de lenguaje también proporcionarán una forma fácil de pasar la entrada estándar al comando, que es lo único en lo que estás usando múltiples procesos y una canalización para.

Aún debe considerar otras posibilidades de ataque (por ejemplo, ¿ cracklib-check consume muchos recursos cuando pasa una cadena muy larga? Entonces se ha abierto a un ataque clásico de denegación de servicio), pero Al menos evitará los orificios de inyección.

    
respondido por el Xiong Chiamiov 27.10.2016 - 22:43
fuente

Lea otras preguntas en las etiquetas