diff --git a/server.js b/server.js index e1b104b..b3e93b0 100644 --- a/server.js +++ b/server.js @@ -30,7 +30,7 @@ const { MOCK_USERS, backUrl } = require('./src/config'); const { mutationLimiter, exportLimiter } = require('./src/middleware/rateLimit'); const { initCsrf } = require('./src/middleware/csrf'); const { createSessionMiddleware } = require('./src/middleware/session'); -const { cspMiddleware } = require('./src/middleware/csp'); +const { CSP_DIRECTIVES } = require('./src/middleware/csp'); const app = express(); const PORT = process.env.PORT || 3000; @@ -39,9 +39,9 @@ app.set('view engine', 'ejs'); app.set('views', path.join(__dirname, 'views')); // ── Безопасность HTTP-заголовков ─────────────────────────────────────────────── -// helmet выставляет базовые заголовки; CSP вынесен в src/middleware/csp.js. -app.use(helmet({ contentSecurityPolicy: false })); -app.use(cspMiddleware); +// helmet выставляет все security-заголовки одним вызовом, включая CSP. +// Директивы CSP вынесены в src/middleware/csp.js. +app.use(helmet({ contentSecurityPolicy: { directives: CSP_DIRECTIVES } })); // За reverse-proxy (nginx/k8s ingress) — доверяем первому хопу для secure cookies. if (process.env.NODE_ENV === 'production') app.set('trust proxy', 1); diff --git a/src/middleware/csp.js b/src/middleware/csp.js index 80bb467..90f4435 100644 --- a/src/middleware/csp.js +++ b/src/middleware/csp.js @@ -1,51 +1,39 @@ /** - * src/middleware/csp.js — Content Security Policy через helmet. + * src/middleware/csp.js — Content Security Policy директивы. * - * Текущее ограничение: EJS-шаблоны используют inline