Skip to content

Fix/security performance hardening#11

Merged
Stevenjoelrs merged 7 commits into
devfrom
fix/security-performance-hardening
Jul 19, 2026
Merged

Fix/security performance hardening#11
Stevenjoelrs merged 7 commits into
devfrom
fix/security-performance-hardening

Conversation

@Stevenjoelrs

Copy link
Copy Markdown
Member

No description provided.

Seguridad:
- submissions: transacción Serializable en chequeo de duplicado + puntaje
  (envíos concurrentes duplicaban puntos); comparación de flags a tiempo
  constante; validar tipo y longitud de la flag
- submissions/files: los retos bloqueados ahora respetan las condiciones
  de desbloqueo vía helper compartido src/lib/unlock.ts (antes un reto
  desbloqueado seguía rechazando envíos)
- hints: exigir sesión en GET, ventana de juego y saldo del equipo al
  comprar, compra atómica (la concurrente daba 500), ocultar hints de
  retos inactivos
- auth: bcrypt dummy cuando el alias no existe (enumeración por timing),
  fallback a x-real-ip, tope de longitud de contraseña (DoS bcrypt)
- register: validación de tipos y formato, alias con charset estricto
  (suplantación con espacios), contraseña 6-128, carrera P2002 → 409
- teams: creación atómica (equipo + líder), guard TOCTOU contra unirse a
  dos equipos a la vez, validación de tipos
- files: sanitizar filename en Content-Disposition (inyección de headers)
- middleware: tope al mapa del rate limiter (agotamiento de memoria vía
  X-Forwarded-For falsificado)
- admin: points/costos como enteros no negativos, links solo http(s)
  (bloquea javascript:), límite de longitud en anuncios, validar fechas
- next.config: cabeceras de seguridad y quitar X-Powered-By

Rendimiento:
- challenges: query agrupada de condiciones de desbloqueo (antes N+1)
- leaderboard: contar miembros con _count en vez de cargar las filas
- cache: misses concurrentes comparten un solo fetch (anti-stampede)
@Stevenjoelrs Stevenjoelrs self-assigned this Jul 19, 2026
@Stevenjoelrs
Stevenjoelrs merged commit e6379c0 into dev Jul 19, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant