refactor: шаг 3 — CSRF-инициализация вынесена в src/middleware/csrf.js
This commit is contained in:
@@ -4,7 +4,8 @@ const path = require('path');
|
||||
const helmet = require('helmet');
|
||||
// rateLimit.js: mutationLimiter (POST-роуты) и exportLimiter (GET /export)
|
||||
const { mutationLimiter, exportLimiter } = require('./src/middleware/rateLimit');
|
||||
const { doubleCsrf } = require('csrf-csrf');
|
||||
// csrf.js: фабрика для инициализации CSRF-защиты (double-submit cookie pattern)
|
||||
const { initCsrf } = require('./src/middleware/csrf');
|
||||
require('dotenv').config();
|
||||
const { checkConnection } = require('./src/db');
|
||||
const { initAuth, requireAdmin } = require('./src/auth');
|
||||
@@ -31,21 +32,11 @@ app.use(cookieParser());
|
||||
async function start() {
|
||||
const auth = await initAuth();
|
||||
|
||||
// ── CSRF защита (double-submit cookie pattern) ─────────────────────────────
|
||||
// getSecret: секрет для HMAC подписи CSRF-токена. В проде берётся из env.
|
||||
// getSessionIdentifier: привязывает токен к конкретной сессии (JWT cookie).
|
||||
// Если пользователь не залогинен (пустая строка) — токен не привязан к сессии,
|
||||
// но это допустимо для login-формы (mock-auth).
|
||||
const { doubleCsrfProtection, generateCsrfToken } = doubleCsrf({
|
||||
getSecret: () => process.env.CSRF_SECRET || 'dev-csrf-secret-change-in-prod',
|
||||
getSessionIdentifier: (req) => req.cookies.jwt || '',
|
||||
cookieOptions: {
|
||||
secure: process.env.NODE_ENV === 'production',
|
||||
sameSite: 'lax',
|
||||
httpOnly: true,
|
||||
},
|
||||
size: 64, // длина токена в байтах
|
||||
});
|
||||
// ── CSRF защита ────────────────────────────────────────────────────────────
|
||||
// initCsrf() читает CSRF_SECRET и NODE_ENV из process.env.
|
||||
// Возвращает: doubleCsrfProtection (middleware на POST) и
|
||||
// generateCsrfToken (вызов в GET-роутах для передачи токена в шаблон).
|
||||
const { doubleCsrfProtection, generateCsrfToken } = initCsrf();
|
||||
|
||||
// ── Публичные маршруты (до auth.middleware) ──────────────────────────────────
|
||||
|
||||
|
||||
Reference in New Issue
Block a user