Ответ вслух Senior Заголовки и cookies обновлено

CORS для тестировщика

Вопрос

Объясни, что такое CORS, почему в Postman работает, а в браузере нет, и какие баги CORS ты бы искал.

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

Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.

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

Коротко

Origin это схема, домен и порт. Браузер по политике same-origin не даёт скрипту с одного origin читать ответы с другого.

Что должно прозвучать в ответе

  • Браузер по умолчанию не даёт скрипту читать ответы с другого 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 ошибок.