Por qué debe hachís

Todas las contraseñas se deben cifrar antes de entrar en una base de datos porque hay que tener en cuenta el escenario en el que algún usuario malintencionado intente entrar en tus datos. Las contraseñas son información sensible que no quieres que nadie vea.

No confundamos el cifrado con el hash. Cifrar algo supone que más tarde puede ser descifrado. Aunque esto es mejor que dejarlo como texto plano, lo que realmente queremos es algo que no pueda ser desencriptado. Esto es lo que nos ofrece el hashing.

Hashing con Bcrypt

Para este ejemplo vamos a utilizar el más popular bcryptjs para Node.js. Sin embargo, sigue las mismas reglas que otras librerías Bcrypt estándar. Pasas una cadena para ser hash y normalmente también una sal.

Para el ejemplo de bcryptjs harías algo como esto, según la documentación:

El hash resultante no sería legible para el ser humano y, por tanto, seguro de almacenar en una base de datos. Pero, ¿cómo se comparan las contraseñas en el caso de que haya que implementar un inicio de sesión de usuario?

Validación con contraseñas guardadas

Las librerías Bcrypt siempre tienen una función para comparar una contraseña de texto plano contra un hash. Así es como se validaría una contraseña en el escenario de inicio de sesión de usuario.

Las dos líneas anteriores fueron tomadas de la documentación. En la primera línea, la comparación fallará y devolverá false al usuario. En este caso usted sabe que los valores son erróneos sin siquiera saber cuál es realmente la contraseña hash. En el caso de la segunda línea, las contraseñas coinciden y obtendrá una respuesta verdadera.

Un ejemplo práctico

Hagamos un ejemplo práctico de lo que hemos aprendido arriba. Crear un nuevo directorio en algún lugar y en ella crear un nuevo paquete.json con el siguiente JSON:

Las partes importantes son las dependencias. Estamos incluyendo bcryptjs para el hash, couchbase para la comunicación con Couchbase a través de nuestra aplicación, y uuid para generar claves de documento únicas.

Ahora tenemos que crear un nuevo archivo llamado config.json en el directorio de nuestro proyecto e incluye el siguiente JSON:

Deberías cambiar el servidor y el cubo por lo que tengas pensado utilizar.

Ahora viene lo divertido Crea un archivo llamado app.js ya que aquí es donde irá todo nuestro código. Tenga en cuenta que esto es un ejemplo, por lo que la funcionalidad será limitada. Añada el siguiente código JavaScript al archivo app.js file:

Básicamente estamos creando un documento JSON con una contraseña hash e insertándolo en Couchbase Server. Una vez completada la inserción, obtenemos el documento y comparamos las contraseñas.

Conclusión

Nunca debes almacenar contraseñas en texto plano en tu base de datos. No importa cuán segura sea tu base de datos o qué tipo de base de datos estés usando. Usando el algoritmo hash Bcrypt en tus contraseñas puedes añadir una tremenda cantidad de seguridad para tus usuarios.

En bcryptjs para Node.js es sólo una de las muchas bibliotecas adecuadas que pueden realizar esta tarea.

Autor

Publicado por Nic Raboy, Defensor del Desarrollador, Couchbase

Nic Raboy es un defensor de las tecnologías modernas de desarrollo web y móvil. Tiene experiencia en Java, JavaScript, Golang y una variedad de frameworks como Angular, NativeScript y Apache Cordova. Nic escribe sobre sus experiencias de desarrollo relacionadas con hacer el desarrollo web y móvil más fácil de entender.

Dejar una respuesta