Estado de seguridad
93%
Puntuacion de seguridad — Nivel BUENO
39 controles pasados
3 advertencias
0 fallidos
Controles implementados

Rate Limiting

express-rate-limit: 100 req/IP por ventana de 15 min

CORS

Origenes permitidos, credenciales habilitadas, metodos restringidos

Sanitizacion

Auto-sanitize de strings, XSS neutralizado, recursivo en objetos

Encriptacion

AES-256-GCM para secrets, clave desde env, permisos 0o600

Helmet

Headers de seguridad HTTP, trust proxy, config produccion

Audit Trail

Winston: error.log, combined.log, quickbooks.log con contexto QB

ControlDetalle
Rate Limitingexpress-rate-limit — 100 peticiones por IP en ventana de 15 minutos
CORSOrigenes: localhost:3000, apiqb.admindual.com, developer.intuit.com, oauth.platform.intuit.com
SanitizacionXSS: & < > " ' / neutralizados. Recursivo en objetos. Rutas excluidas para APIs externas
EncriptacionAES-256-GCM en .organization-secrets con IV aleatorio de 16 bytes
PayloadLimite de 10kb en body. Timeouts configurados por ruta
DELETETodas las rutas DELETE protegidas con API Key + logging + validacion SyncToken
ErroresTry-catch global, codigos HTTP especificos, info sensible nunca expuesta
Autenticacion y tokens
// Encriptacion de secrets
const algorithm = 'aes-256-gcm';
const iv = crypto.randomBytes(16);
const cipher = crypto.createCipheriv(algorithm, key, iv);
// Archivo .organization-secrets con permisos 0o600
ComponenteDetalle
Access TokenExpira cada 1 hora, auto-refresh en respuesta 401 (1 solo retry)
Refresh TokenValido 100 dias. Si expira, re-auth manual via /connect/:org
SecretsAES-256-GCM, archivo con permisos 0o600, clave desde ENCRYPTION_KEY
OAuth2Flujo Authorization Code con intuit-oauth SDK
API Keys

Middleware validateApiKey protege 11 rutas. Se valida via header X-API-Key contra variable de entorno.

const validateApiKey = (req, res, next) => {
  const apiKey = req.headers['x-api-key'];
  if (!apiKey || apiKey !== process.env.API_KEY) {
    return res.status(401).json({
      success: false,
      error: 'API key no valida'
    });
  }
  next();
};

Variables de entorno criticas

VariableProposito
QUICKBOOKS_CLIENT_IDID de la app OAuth en Intuit
QUICKBOOKS_CLIENT_SECRETSecret de la app OAuth
ENCRYPTION_KEYClave para AES-256-GCM de secrets
API_KEYClave para proteger endpoints de la API
Validacion de datos
ValidacionDetalle
Payload sizeLimite de 10kb en request body
TimeoutsConfigurados por ruta individual
FechasFormato YYYY-MM-DD validado
Auth stateEstado de autenticacion verificado antes de operaciones QB
SyncTokenRequerido en updates/deletes para evitar conflictos
Advertencias pendientes
AdvertenciaEstadoAccion
Sanitizacion de caracteres especialesParcialmente implementadoMejorar para caracteres adicionales
Helmet completoInstalado, no totalmente configuradoActivar todas las protecciones de headers
NODE_ENV en produccionFalta configurarEstablecer NODE_ENV=production

Checklist de produccion

[ ] Certificados SSL/TLS configurados
[ ] Firewall y restricciones de IP
[ ] Monitoreo en tiempo real
[ ] Backups automaticos de logs y config
[ ] Plan de respuesta a incidentes
[ ] Pruebas de penetracion regulares
[ ] Escaneo de vulnerabilidades automatico