CORS для тестировщика
Вопрос
Объясни, что такое CORS, почему в Postman работает, а в браузере нет, и какие баги CORS ты бы искал.
Попробуйте сами
Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.
Показать ответ и разбор
Коротко
Что должно прозвучать в ответе
Браузер по умолчанию не даёт скрипту читать ответы с другого origin (same-origin policy)
CORS: сервер заголовками Access-Control-Allow-* разрешает конкретным origin читать ответ
Непростые запросы идут с preflight OPTIONS
Postman и curl не браузер и CORS не проверяют
Баги: нет заголовков на ответах-ошибках, preflight не обработан, отражается любой Origin с credentials
Что могут спросить следом
- Что такое origin: что в него входит?
- Почему CORS не защищает сервер от запросов?
- Как воспроизвести CORS-баг без фронтенда?
Разбор
Origin это схема, домен и порт. Браузер по политике same-origin не даёт скрипту с одного origin читать ответы с другого. CORS это способ серверу ослабить это правило: ответ несёт Access-Control-Allow-Origin с разрешённым origin, а для запросов с нестандартным методом, JSON или своими заголовками браузер сначала шлёт preflight OPTIONS. Важно, что CORS проверяет браузер, а не сервер: запрос до сервера доходит, просто скрипту не отдают ответ. Поэтому Postman и curl работают всегда, они не браузер. Какие баги я ищу: preflight отвечает 401 или 404, потому что авторизация висит и на OPTIONS; на ответах 4xx и 5xx нет CORS-заголовков, и фронтенд видит невнятную ошибку CORS вместо нормального текста; сервер отражает любой Origin вместе с Allow-Credentials true, это уязвимость. Воспроизвожу через curl с заголовком Origin и смотрю заголовки ответа, или через консоль браузера на другом домене.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.