feat: integrate rate limiting and enhance security features

- Added @convex-dev/rate-limiter dependency to manage request limits effectively.
- Implemented rate limiting configurations for IPs, users, and endpoints to prevent abuse and enhance security.
- Introduced new security analysis endpoint to detect potential attacks based on incoming requests.
- Updated backend schema to include rate limit configurations and various cyber attack types for improved incident tracking.
- Enhanced existing security functions to incorporate rate limiting checks, ensuring robust protection against brute force and other attacks.
This commit is contained in:
2025-11-16 01:20:57 -03:00
parent ea01e2401a
commit 88983ea297
19 changed files with 3102 additions and 109 deletions

View File

@@ -65,6 +65,38 @@ export async function registrarLogin(
sistema,
timestamp: Date.now(),
});
// Detecção automática de brute force após login falho
// Verificar se há múltiplas tentativas falhas do mesmo IP
if (!dados.sucesso && ipAddressValidado) {
const minutosAtras = 15;
const dataLimite = Date.now() - minutosAtras * 60 * 1000;
// Contar tentativas falhas recentes do mesmo IP
const tentativasFalhas = await ctx.db
.query("logsLogin")
.withIndex("by_ip", (q) => q.eq("ipAddress", ipAddressValidado))
.filter((q) =>
q.gte(q.field("timestamp"), dataLimite) &&
q.eq(q.field("sucesso"), false)
)
.collect();
// Se houver 5 ou mais tentativas falhas, registrar evento de segurança
if (tentativasFalhas.length >= 5) {
// Importar função de segurança dinamicamente para evitar dependência circular
const { internal } = await import("./_generated/api");
try {
await ctx.scheduler.runAfter(0, internal.security.detectarBruteForce, {
ipAddress: ipAddressValidado,
janelaMinutos: minutosAtras
});
} catch (error) {
// Log erro mas não bloqueia o registro de login
console.error("Erro ao agendar detecção de brute force:", error);
}
}
}
}
// Helpers para extrair informações do userAgent