Код Middle Безопасность бэкенда обновлено

CORS: проверка Origin по белому списку

Условие

Напиши corsHeaders(origin, allowList): заголовки ответа для запроса с заголовком Origin (или undefined, если его нет).

  • allowList: массив точных origin (https://app.example.ru) и шаблонов поддоменов вида https://*.example.ru (звёздочка это ровно один или несколько уровней поддомена, но не пустая строка; схема и порт должны совпасть).
  • Если origin разрешён, вернуть { 'Access-Control-Allow-Origin': origin, 'Access-Control-Allow-Credentials': 'true', 'Vary': 'Origin' }.
  • Иначе вернуть { 'Vary': 'Origin' }.
  • Origin null (строка, бывает у sandbox iframe и file://) никогда не разрешается.

Примеры

corsHeaders("https://app.example.ru", ["https://app.example.ru"]) // {"Access-Control-Allow-Origin":"https://app.example.ru","Access-Control-Allow-Credentials":"true","Vary":"Origin"}
corsHeaders("https://evil.ru", ["https://app.example.ru"]) // {"Vary":"Origin"}
corsHeaders("https://admin.example.ru", ["https://*.example.ru"]) // {"Access-Control-Allow-Origin":"https://admin.example.ru","Access-Control-Allow-Credentials":"true","Vary":"Origin"}

Как подойти

Подсказки: 2
  1. Точные правила сравнивай целиком.
  2. Для шаблона хост должен оканчиваться на "." + домен, а не просто на домен.

Решите в тренажёре

Редактор с автотестами прямо в браузере. Можно решить спокойно, вслух или под таймером, как на собесе.

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