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:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user