import { env } from '../config/env.js'; export function csrfRequired(req, res, next) { const cookieToken = req.cookies?.[env.COOKIE_CSRF_NAME]; const headerToken = req.get('x-csrf-token'); // Для SameSite cookie защита уже встроена в браузер // Если cookie есть и SameSite установлен - это уже защита от CSRF // Дополнительная проверка заголовка для обратной совместимости if (cookieToken) { // Cookie с SameSite=Lax/Strict уже защищает от CSRF // Если заголовок есть - проверяем совпадение (double submit pattern) if (headerToken && cookieToken !== headerToken) { return res.status(403).json({ error: 'CSRF_INVALID', message: 'CSRF token mismatch', }); } // Если заголовка нет - разрешаем (SameSite cookie защищает) return next(); } // Cookie нет - это ошибка return res.status(403).json({ error: 'CSRF_INVALID', message: 'CSRF token is missing', }); }