Код 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
- Точные правила сравнивай целиком.
- Для шаблона хост должен оканчиваться на
"." + домен, а не просто на домен.
Решите в тренажёре
Редактор с автотестами прямо в браузере. Можно решить спокойно, вслух или под таймером, как на собесе.
Предыдущий вопрос
Безопасный INSERT: параметры и белый список колонок
Следующий вопрос
Проверка claims JWT после подписи