Skip to content

Commit f200fa6

Browse files
committed
security: implement rate limiting middleware to prevent DoS attacks
1 parent 98f5b0c commit f200fa6

4 files changed

Lines changed: 48 additions & 0 deletions

File tree

email-api/package-lock.json

Lines changed: 29 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

email-api/package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
"bcrypt": "^6.0.0",
1313
"cors": "^2.8.5",
1414
"express": "^5.1.0",
15+
"express-rate-limit": "^8.3.1",
1516
"helmet": "^8.1.0",
1617
"jsonwebtoken": "^9.0.3",
1718
"morgan": "^1.10.1",

email-api/src/app.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import cors from 'cors'
33
import helmet from 'helmet'
44
import morgan from 'morgan'
55
import routes from './routes/index.js'
6+
import apiLimiter from './middlewares/rateLimiter.js'
67
import { errorHandler } from './middlewares/errorHandler.js'
78
import { env } from './config/env.js'
89

@@ -16,6 +17,9 @@ app.use(morgan('dev'))
1617
app.use(express.json())
1718
app.use(express.urlencoded({ extended: false }))
1819

20+
// Se aplica límite de peticiones antes de las rutas
21+
app.use(apiLimiter)
22+
1923
// Routes
2024
app.use('/', routes)
2125

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
import rateLimit from 'express-rate-limit';
2+
3+
const apiLimiter = rateLimit({
4+
windowMs: 15 * 60 * 1000, // 15 minutos
5+
max: 100, // Límite de 100 peticiones por IP
6+
message: {
7+
status: 429,
8+
message: 'Demasiadas peticiones. Por seguridad, intenta de nuevo en 15 minutos.'
9+
},
10+
standardHeaders: true,
11+
legacyHeaders: false,
12+
});
13+
14+
export default apiLimiter;

0 commit comments

Comments
 (0)