La seguridad de una aplicación es extremadamente importante cuando construimos un proyecto grande y altamente escalable. Entonces, en este artículo, analizaremos algunas de las mejores prácticas que debemos seguir en los proyectos de Node.js para que no haya problemas de seguridad en un momento posterior.
En este artículo, discutiremos algunos de los ataques comunes y daremos sugerencias para prevenirlos: Base de
datos comprometida: Lo primero y más importante es que la base de datos y el atacante obtuvieron acceso a la base de datos si no los protegemos. Entonces, para asegurarlo, debemos seguir dos cosas que son:
- Cifrar fuertemente las contraseñas con sal y hash: para cifrar una contraseña en la aplicación Express, vamos a utilizar el paquete bcyrpt.js que cifrará una contraseña y la convertirá en un código hash que los atacantes no pueden leer.
- Cifrar fuertemente el token de restablecimiento de contraseñas: cada vez que el usuario vaya a restablecer una contraseña, se debe generar un nuevo código hash de restablecimiento de contraseña para que ningún atacante lo entienda.
Ataques de fuerza bruta: en los ataques de fuerza bruta, los atacantes intentan continuamente generar una contraseña aleatoria. Los atacantes intentan adivinar la contraseña en este caso generando millones de contraseñas hasta que encuentran la contraseña correcta. Entonces, cómo evitar y protegerse de este tipo de ataques:
- Use el paquete bcrypt.js: procesa la contraseña cuando la almacena en la base de datos.
- Implementar limitación de velocidad: en la limitación de velocidad, limita la cantidad de requests provenientes de una única IP.
- Implemente un número máximo de intentos de inicio de sesión para cada usuario: puede establecer un límite para que, después de algunos de los intentos de inicio de sesión fallidos, no pueda iniciar sesión hasta un período de tiempo específico.
Ataques de secuencias de comandos en sitios cruzados (XSS): ataques XSS en los que los atacantes intentan inyectar algunas secuencias de comandos maliciosas en nuestro código para encontrar algún vacío legal y aprovecharlo. Este tipo de ataque es peligroso porque permite a los atacantes leer el almacenamiento local en el lado del cliente. Esta es la razón por la que no sugerimos almacenar tokens JWT en el almacenamiento local.
Cómo prevenir este tipo de ataques:
- Almacene los tokens JWT en cookies de solo HTTP: nunca almacene tokens de JWT en el almacenamiento local, use siempre cookies solo de HTTP.
- Desinfecte los datos de entrada del usuario: Al desinfectar los datos de entrada del usuario, estamos limitando al usuario para que no ingrese datos extraños.
- Establezca encabezados HTTP especiales: puede usar el paquete integrado npm para agregar algunos de los encabezados especiales para ayudar en la seguridad. El casco establecerá varios encabezados HTTP para ayudar a proteger su aplicación.
Ataques de denegación de servicio (DOS): en los ataques de DOS, los atacantes hacen tantas requests al servidor que colapsa y no está disponible para los usuarios. formas de prevenirlos:
- Implemente la limitación de velocidad: al usar la limitación de velocidad, puede evitar fácilmente este tipo de ataques, crea una función de limitación de velocidad mediante la cual puede limitar el número de requests realizadas por los usuarios.
- Limitar la carga útil del cuerpo: también podemos limitar la cantidad de datos enviados en la carga útil del cuerpo para que la carga no sea tan alta que bloquee nuestra aplicación.
- Evite las expresiones regulares malvadas: estas son las expresiones regulares que tardan un tiempo exponencial en ejecutarse para entradas que no coinciden.
Inyección de consulta NoSql: este tipo de ataques ocurren cuando los atacantes, en lugar de ingresar datos válidos, inyectan alguna consulta que dará como resultado verdadero para algún campo sin datos correctos, por ejemplo, en el campo de nombre de usuario, el atacante coloca algunos datos que conducirán a verdadero y, al hacerlo, los atacantes toman acceso a sus datos privados. Entonces, para evitarlo, use Mongoose para MongoDB, que proporciona validaciones de esquema para que pueda validar fácilmente y prevenir tales ataques.
Otras mejores prácticas:
- Cree contraseñas aleatorias y reinicie tokens con fecha de caducidad.
- Denegar el acceso al token JWT después del cambio de contraseña.
- No confirme datos confidenciales o configuraciones en git.
- Utilice siempre la autenticación de dos factores.
- Dedique siempre el mayor tiempo posible a las funciones de autenticación, autorización y seguridad de su aplicación.
Publicación traducida automáticamente
Artículo escrito por praveensharma2 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA