Aunque las cabeceras se gestionan en el servidor, puedes:
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