38 lines
1.1 KiB
TypeScript
38 lines
1.1 KiB
TypeScript
/**
|
|
* Rate-Limiting-Middleware für sensible Endpoints (Login, Passwort-Reset).
|
|
* Schützt gegen Brute-Force- und Credential-Stuffing-Angriffe.
|
|
*/
|
|
import rateLimit from 'express-rate-limit';
|
|
|
|
/**
|
|
* Login: 10 Versuche pro 15 Minuten pro IP.
|
|
* Nach Überschreitung: 15 Min Sperre für diese IP.
|
|
*/
|
|
export const loginRateLimiter = rateLimit({
|
|
windowMs: 15 * 60 * 1000, // 15 Minuten
|
|
limit: 10, // Max. 10 Versuche pro Zeitfenster
|
|
standardHeaders: 'draft-7',
|
|
legacyHeaders: false,
|
|
message: {
|
|
success: false,
|
|
error: 'Zu viele Login-Versuche. Bitte in 15 Minuten erneut versuchen.',
|
|
},
|
|
// Erfolgreiche Logins zählen nicht gegen das Limit
|
|
skipSuccessfulRequests: true,
|
|
});
|
|
|
|
/**
|
|
* Passwort-Reset-Anfrage: 5 Versuche pro Stunde pro IP.
|
|
* Verhindert Mail-Flut und gezielte Brute-Force über Reset-Links.
|
|
*/
|
|
export const passwordResetRateLimiter = rateLimit({
|
|
windowMs: 60 * 60 * 1000, // 1 Stunde
|
|
limit: 5,
|
|
standardHeaders: 'draft-7',
|
|
legacyHeaders: false,
|
|
message: {
|
|
success: false,
|
|
error: 'Zu viele Passwort-Reset-Anfragen. Bitte in einer Stunde erneut versuchen.',
|
|
},
|
|
});
|