advanced
Rate limiting и audit logs
Ограничивайте abusive или expensive actions через identity-aware quotas и сохраняйте tamper-resistant audit trails для sensitive security events.
Rate limiting сдерживает abuse, credential stuffing и дорогие endpoints. Ключ по user ID, API key, IP (с учётом proxy) или tenant. Token bucket или sliding window; 429 с `Retry-After`.
import { RateLimiterRedis } from 'rate-limiter-flexible';
const limiter = new RateLimiterRedis({
storeClient: redis,
keyPrefix: 'rl_login',
points: 5,
duration: 60,
});
try {
await limiter.consume(req.ip);
} catch {
return res.status(429).json({ error: 'too_many_requests' });
}
Audit logs фиксируют security-sensitive события: login success/failure, смена permissions, export данных, admin actions. Append-only, синхронизированные часы, actor + target + outcome, без секретов в payload.
На интервью: distributed rate limiting с Redis; per-route vs global; retention audit и GDPR.
Типовые ошибки: только IP за carrier NAT; логирование паролей при failed login; изменяемые audit tables без integrity.
Компромисс — между простотой, производительностью, безопасностью и эксплуатацией: назовите, что оптимизировали и какую цену приняли.
Чеклист:
- Identity-aware limits на auth и costly routes.
- Structured audit events с correlation IDs.
- Tamper-evident/WORM storage для compliance.
- Алерты на аномалии (burst failures, mass export).