Skip to content

Instantly share code, notes, and snippets.

@WanerValencia
Last active November 8, 2024 23:19
Show Gist options
  • Save WanerValencia/5be06a7a433646df3ce7b9ba5d636b3d to your computer and use it in GitHub Desktop.
Save WanerValencia/5be06a7a433646df3ce7b9ba5d636b3d to your computer and use it in GitHub Desktop.
Recomendacion de seguridad en NESTJS

Recomendaciones de seguridad en NestJS

La seguridad es un aspecto crucial en cualquier aplicación web. A continuación, se proporcionan algunas recomendaciones para mejorar la seguridad en las aplicaciones NestJS.

1. Validación de entrada

La validación de la entrada del usuario es fundamental para proteger tu aplicación de ataques maliciosos, como la inyección de SQL. NestJS utiliza la biblioteca class-validator para la validación, que se puede integrar fácilmente con los DTOs (Data Transfer Objects).

Ejemplo:

import { IsEmail, IsNotEmpty } from 'class-validator';

export class CreateUserDto {
  @IsNotEmpty()
  name: string;

  @IsEmail()
  email: string;
}

2. Protección CSRF

Las aplicaciones que utilizan cookies para gestionar las sesiones del usuario deben protegerse contra los ataques CSRF (Cross-Site Request Forgery). Puedes utilizar la biblioteca csurf para añadir protección CSRF a tu aplicación NestJS.

Instalación:

npm install csurf

Uso:

import * as csurf from 'csurf';

// En tu middleware principal
app.use(csurf());

3. Protección contra ataques de fuerza bruta

Para prevenir los ataques de fuerza bruta en los puntos finales de autenticación, puedes utilizar la biblioteca express-rate-limit.

Instalación:

npm install express-rate-limit

Uso:

import * as rateLimit from 'express-rate-limit';

// En tu middleware principal
app.use(
  rateLimit({
    windowMs: 15 * 60 * 1000, // 15 minutos
    max: 100, // limita cada IP a 100 solicitudes por ventana
  }),
);

4. Utiliza siempre HTTPS

Utilizar HTTPS es esencial para proteger la información del usuario. Asegúrate de redirigir todo el tráfico HTTP a HTTPS.

5. Gestión de las dependencias

Mantén todas tus dependencias actualizadas y utiliza herramientas como npm audit para identificar y corregir las vulnerabilidades de seguridad en tus dependencias.

6. Headers HTTP seguros

Utiliza la biblioteca helmet para establecer headers HTTP seguros en tu aplicación NestJS.

Instalación:

npm install helmet

Uso:

import * as helmet from 'helmet';

// En tu middleware principal
app.use(helmet());

} ¡Claro! Aquí te dejo algunas recomendaciones de seguridad adicionales que podrías considerar para tu aplicación NestJS:

7. Protección contra Inyecciones NoSQL

Si estás trabajando con bases de datos NoSQL como MongoDB, es crucial proteger tu aplicación contra las inyecciones NoSQL. Puedes hacer esto validando y saneando los datos de entrada del usuario. La biblioteca express-mongo-sanitize puede ayudarte a prevenir este tipo de ataques.

Instalación:

npm install express-mongo-sanitize

Uso:

import * as mongoSanitize from 'express-mongo-sanitize';

// En tu middleware principal
app.use(mongoSanitize());

8. Protección de datos sensibles

Evita exponer información sensible en los mensajes de error que devuelve tu aplicación. Los detalles como los mensajes de error de la base de datos pueden proporcionar a un atacante información sobre la estructura de tu base de datos.

9. Autenticación y Autorización

Asegúrate de que todos los endpoints de tu API estén protegidos con autenticación y autorización adecuadas. NestJS proporciona una forma muy conveniente de manejar estos aspectos a través de los módulos Passport y Guards.

10. Protección contra la Falsificación de Solicitudes entre Sitios (XSS)

Si estás sirviendo contenido HTML, debes proteger tu aplicación contra los ataques de XSS. Siempre debes escapar la salida HTML y evitar la inserción directa de HTML siempre que sea posible.

11. Control de acceso basado en roles (RBAC)

Además de la autenticación y la autorización básicas, puedes implementar un control de acceso basado en roles para restringir el acceso a los recursos basándote en los roles de los usuarios.

Recuerda, no existe una solución única para todos en seguridad. La seguridad de tu aplicación dependerá en gran medida de su naturaleza y sus requisitos. Estas son solo algunas prácticas generales que podrían ser útiles en la mayoría de los casos.

Estas son solo algunas de las prácticas de seguridad que puedes seguir para proteger tu aplicación NestJS. Recuerda que la seguridad de una aplicación es un proceso continuo y debe ser una consideración clave durante todo el ciclo de desarrollo.

Documentación oficial

@tomihq
Copy link

tomihq commented Jan 24, 2024

csurf is deprecated and is not safe anymore -> check https://github.com/expressjs/csurf#csurf

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment