Код-ревью Middle CSRF, SameSite и CORS обновлено
Ревью: настройки Express и маршрут перевода
Вопрос
Найдите проблемы, связанные с CSRF, CORS и cookie.
app.use(cors({ origin: (origin, cb) => cb(null, true), credentials: true }));
app.use(session({
secret: process.env.SESSION_SECRET,
cookie: { httpOnly: true, secure: true, sameSite: 'none' },
}));
app.get('/api/transfer', requireLogin, async (req, res) => {
await transfer(req.session.userId, req.query.to, Number(req.query.amount));
res.json({ ok: true });
});
Коротко
Каждая настройка по отдельности частая ошибка, вместе они дают полный CSRF и кражу данных через CORS. Исправление: allowlist origin, SameSite=Lax, POST с CSRF-токеном, валидация входа.
Что должен найти ревьюер
- Безопасностьстрока 1CORS отражает любой origin с credentials: любой сайт прочитает ответы API от имени пользователя. Нужен точный allowlist.
- Безопасностьстрока 4
sameSite: 'none'без необходимости: cookie уходит на все межсайтовые запросы, CSRF открыт. Для обычного приложения нужен Lax или Strict. - Безопасностьстрока 7Перевод денег через GET: срабатывает по ссылке и при навигации, не защищается Lax. Нужен POST.
- Безопасностьстрока 7Нет CSRF-токена или проверки Origin для изменяющего действия.
- Ошибкастрока 8Сумма не валидируется:
NumberдастNaNили отрицательное значение.
Разбор
Каждая настройка по отдельности частая ошибка, вместе они дают полный CSRF и кражу данных через CORS. Исправление: allowlist origin, SameSite=Lax, POST с CSRF-токеном, валидация входа.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.
Предыдущий вопрос
Ревью: представление Django для смены email
Следующий вопрос
Кейс: где хранить токены SPA