seguridad de código y OWASP para Node.js (front y back)

9 views
Skip to first unread message

Kiquenet

unread,
Jul 4, 2025, 8:06:47 AMJul 4
to AltNet-Hispano
Experiencias?

Kiquenet

unread,
Jul 7, 2025, 3:01:35 AMJul 7
to AltNet-Hispano
🔍 Cabeceras ausentes:
  • Permissions-Policy
  • Cross-Origin-Embedder-Policy (COEP)
  • Cross-Origin-Opener-Policy (COOP)
  • Cross-Origin-Resource-Policy (CORP)
🧨 Impactos potenciales:
  • XS-Leaks (canales laterales entre orígenes)
  • Acceso no autorizado a APIs sensibles (cámara, micrófono, geolocalización)
  • Carga de recursos inseguros
  • Falta de aislamiento entre contextos de navegación

    Aunque las cabeceras se gestionan en el servidor, puedes:

    • Evitar el uso de eval() o innerHTML para prevenir XSS.
    • Usar iframe sandbox si embebes contenido externo.
    • Validar y sanitizar entradas del usuario antes de enviarlas al backend.

Kiquenet

unread,
Jul 7, 2025, 3:05:21 AMJul 7
to AltNet-Hispano
con helmet o sin helmet ?

const express = require('express');

const helmet = require('helmet');

const app = express();

// Middleware Helmet para cabeceras estándar

app.use(helmet());

// Cabeceras personalizadas adicionales

app.use((req, res, next) => {

  // Política de permisos del navegador

  res.setHeader("Permissions-Policy", "geolocation=(), microphone=(), camera=()");

  // Políticas de aislamiento entre orígenes

  res.setHeader("Cross-Origin-Embedder-Policy", "require-corp");

  res.setHeader("Cross-Origin-Opener-Policy", "same-origin");

  res.setHeader("Cross-Origin-Resource-Policy", "same-origin");

  // Política de seguridad de contenido (CSP)

  res.setHeader("Content-Security-Policy",

    "default-src 'self'; " +

    "script-src 'self'; " +

    "style-src 'self' 'unsafe-inline'; " +

    "img-src 'self' data:; " +

    "font-src 'self'; " +

    "frame-ancestors 'none'; " +

    "object-src 'none'; " +

    "base-uri 'self';"

  );

  // Protección contra sniffing de tipo MIME

  res.setHeader("X-Content-Type-Options", "nosniff");

  // Política de referencia

  res.setHeader("Referrer-Policy", "no-referrer");

  // Protección contra XSS (aunque obsoleta en algunos navegadores)

  res.setHeader("X-XSS-Protection", "1; mode=block");

  // HSTS: solo si usas HTTPS

  res.setHeader("Strict-Transport-Security", "max-age=63072000; includeSubDomains; preload");

  next();

});

// Resto de tu aplicación

app.get('/', (req, res) => {

  res.send('Seguridad configurada correctamente.');

});

const PORT = process.env.PORT || 3000;

app.listen(PORT, () => {

  console.log(`Servidor escuchando en puerto ${PORT}`);

});



🧪 Recomendaciones adicionales

  • Audita con herramientas como Mozilla Observatory para validar la configuración.
  • Evita eval(), innerHTML y document.write() en el frontend.
  • Utiliza bibliotecas como DOMPurify si necesitas renderizar HTML del usuario.

Reply all
Reply to author
Forward
0 new messages