Выбор ответа Middle CORS обновлено

Опасная настройка CORS

Вопрос

Что опасного в такой настройке?

app.use((req, res, next) => {
  res.setHeader('Access-Control-Allow-Origin', req.headers.origin);
  res.setHeader('Access-Control-Allow-Credentials', 'true');
  next();
});

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Любой сайт отправит запрос с куками пользователя и прочитает ответ: защиты нет. Сервер разрешает любой origin, который пришёл, и вместе с credentials.

Варианты ответа

  1. Ничего: origin берётся из самого запроса, значит он всегда правильный и безопасный
  2. Браузер не примет отражённый origin вместе с credentials, там нужна звёздочка *
  3. Не хватает Access-Control-Max-Age, из-за этого preflight будет на каждый запрос
  4. Любой сайт отправит запрос с куками пользователя и прочитает ответ: защиты нетправильный ответ

Разбор

Сервер разрешает любой origin, который пришёл, и вместе с credentials. Злой сайт сделает fetch с куками жертвы и прочитает её данные. Правильно сверять origin со списком разрешённых и ставить Vary: Origin. Отражённый origin браузер примет, в этом и проблема. Звёздочка с credentials вообще запрещена. Max-Age влияет только на кеш preflight, к безопасности отношения не имеет.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.

Термины по теме