Предварительная проверка согласует часть запросов до отправки. Итоговая проверка CORS определяет предоставление ответа сценарию.
Доступ между источниками (CORS)
Определение
Доступ между источниками (CORS) — это протокол браузера: заголовками ответа сервер указывает, сценариям каких источников браузер может отдать этот ответ. Без такого разрешения запрос может дойти до сервера и выполниться, но ответ сценарию браузер не отдаст.
Также ищут: Cross-Origin Resource Sharing · CORS · cross-origin access · Access-Control-Allow-Origin
Зачем это знать
Слишком широкое разрешение раскрывает ответ сторонним сценариям в браузере, а слишком узкое ломает интерфейс. За пределами браузера CORS — не межсетевой экран.
Карта понятия
Что подтверждено
Заголовки ответа CORS позволяют браузеру отдать ответ другого источника запрашивающему сценарию после успешной проверки протокола.
Граница применимости: Протокол CORS в Fetch.
CORS проверяет правила обмена между источниками в браузере, а не подлинность вызывающей стороны и не право на объект; другой клиент может отправить HTTP-запрос без этой проверки.
Граница применимости: Различие между CORS и контролем доступа приложения.
Для межисточникового запроса Fetch с режимом учётных данных include проверка CORS не принимает звёздочку в Access-Control-Allow-Origin: требуется конкретный источник и разрешение учётных данных. Условие связано с режимом запроса, а не только с фактическим наличием cookie.
Граница применимости: Проверка CORS в Fetch для режима include; не обещает отправку cookie вопреки другим ограничениям браузера.
Когда ответ предназначен только выбранному интерфейсу, сервер сверяет полученный источник со своим разрешённым набором. Простое отражение любого значения заголовка источника запроса в разрешающем заголовке не выражает такое ограничение.
Граница применимости: Вывод для политики доступа браузера только из заданных источников; разрешение CORS не подменяет проверку прав API.
Ошибка CORS на чтении ответа может возникнуть уже после обработки отправленного запроса сервером. По одной ошибке в браузере нельзя заключить, что изменяющая операция не выполнилась.
Граница применимости: Случай запроса, который был разрешён к отправке; не относится к основному запросу, остановленному неуспешной предварительной проверкой.
Не путать
CORS может скрыть ответ, но уже выполненное действие остаётся. Защиту изменяющего запроса проектируют на сервере.
Что проверить
- Перечислите источники, которым нужен ответ в браузере.
- Укажите режим учётных данных запроса.
- Для include не используйте звёздочку разрешённого источника.
- Не отражайте произвольное значение источника вместо проверки настроенного списка.
- Проверяйте права на каждый объект в приложении.
- Различайте блокировку отправки и блокировку чтения ответа.
- Проверяйте серверный результат операции при ошибке CORS.
Первоисточники
- Fetch Standard
Определяет CORS protocol, credentials modes, allowed origins и CORS-preflight fetch через OPTIONS.
- Guidelines for API Protection for Cloud-Native Systems
Задаёт API lifecycle controls для authentication, authorization, rate limits, resource limits, logging и monitoring.
- Fetch Standard
Определяет CORS protocol, credentials modes, allowed origins и CORS-preflight fetch через OPTIONS.
Утверждения: 03
- The Web Origin Concept
Определяет origin как scheme, host и port и описывает origin-based browser isolation model.
Утверждения: 04
- Cross-Site Request Forgery Prevention Cheat Sheet
Разводит CSRF tokens, SameSite и origin checks и задаёт свойства synchronizer и signed double-submit tokens.
Утверждения: 05