Descripción
Categoría: Ciberseguridad (hardening anti-DoS)
readBody acumulaba el cuerpo del request sin límite: un solo cliente podía agotar la memoria del indexer mandando un JSON gigante. Además el server HTTP no tenía timeouts explícitos contra conexiones que gotean bytes (slowloris).
Cambios
bimex-indexer/api.js:
readBody ahora aborta con 413 al superar MAX_BODY_BYTES (64KB por defecto, configurable por env) y destruye la conexión.
server.headersTimeout = 30s y server.requestTimeout = 60s. No afectan a /sse: aplican a la recepción del request, no a la respuesta en streaming.
Verificación
Notas para el revisor
Los endpoints actuales usan payloads de <1KB, así que 64KB da margen de sobra. El endpoint de subida IPFS del PR #217 usa su propio lector con límite mayor (15MB), en un módulo separado — ambos PRs son independientes y compatibles.
Descripción
Categoría: Ciberseguridad (hardening anti-DoS)
readBodyacumulaba el cuerpo del request sin límite: un solo cliente podía agotar la memoria del indexer mandando un JSON gigante. Además el server HTTP no tenía timeouts explícitos contra conexiones que gotean bytes (slowloris).Cambios
bimex-indexer/api.js:readBodyahora aborta con 413 al superarMAX_BODY_BYTES(64KB por defecto, configurable por env) y destruye la conexión.server.headersTimeout = 30syserver.requestTimeout = 60s. No afectan a/sse: aplican a la recepción del request, no a la respuesta en streaming.Verificación
npx vitest runpasa sin errores (indexer: 38/38)npm run test:runfrontend (no aplica, no se tocó)cargo test(no aplica, no se tocó el contrato)Notas para el revisor
Los endpoints actuales usan payloads de <1KB, así que 64KB da margen de sobra. El endpoint de subida IPFS del PR #217 usa su propio lector con límite mayor (15MB), en un módulo separado — ambos PRs son independientes y compatibles.