О Cross-Origin Resource Sharing (CORS)

В этой статье расскажем, что такое CORS, как он работает и как помогает безопасности соединений.

Что такое CORS

Механизм безопасности для веб-сайтов. Он дает ресурсу установить правила о том, кто может запрашивать их данные. Это как владелец клуба, который распределяет браслеты на входе. Если у вас есть правильный браслет (разрешение от веб-сайта), вы можете войти. Если у вас нет браслета, то вас не пустят.

CORS создан в том числе для защиты от междоменных атак (CSRF) или других видов, эксплуатирующих политику одного источника (same-origin policy).

Как работает CORS

CORS реализован на стороне сервера с помощью установки специальных HTTP-заголовков. Давайте разберем процесс работы механизма шаг за шагом.

  1. Предварительный запрос

Когда наш браузер хочет получить данные с сервера другого домена, он сначала отправляет предварительный запрос. По сути это проверка разрешения, в которой браузер спрашивает сервер другого домена: «Могу ли я сделать запрос с таким методом и такими заголовками?»

  1. Ответ сервера на предварительный запрос

Если сервер настроен с CORS, он ответит на предварительный запрос, направив обратно соответствующие механизму заголовки. Например, заголовок Access-Control-Allow-Origin → может содержать домен, с которого пришел запрос, указывая браузеру, что запросы с этого источника разрешены.

  1. Основной запрос

Если сервер дал разрешение в виде заголовков CORS → браузер выполняет основной запрос, ожидая получить данные. Тут сервер снова включает заголовки CORS в свой ответ, чтобы браузер мог подтвердить разрешение и обработать данные.

  1. Управление запросами с учетными данными

Если запрос требует проверить подлинность, как в случае с использованием кук или токенов аутентификации, заголовок Access-Control-Allow-Credentials должен быть установлен в true, и заголовок Access-Control-Allow-Origin не может быть *.

Примеры HTTP-заголовков, которые сервер может использовать для реализации CORS:

  • Access-Control-Allow-Origin: http://www.example.com

  • Access-Control-Allow-Methods: GET, POST, PUT

  • Access-Control-Allow-Headers: Content-Type, Authorization

  • Access-Control-Allow-Credentials: true

Благодаря этим заголовкам, браузер знает, какие именно действия разрешены и обрабатывает ответ по всем внедренным правилам. А если заголовки раскрывают ограничения или отсутствуют → браузер блокирует ответ для безопасности.

Как CORS помогает безопасности

  1. Без CORS браузеры ограничивают доступ к ресурсам в соответствии с политикой одного источника. Это сокращает риски атак XSS и CSRF.

  2. С ним разработчики могут точно определить, какие другие сайты могут запрашивать их ресурсы.

  3. Любой запрос к ресурсам с другого источника, который может влиять на данные, сначала требует предварительного запроса (preflight request). Эта мера также помогает предотвратить, например, CSRF.

  4. С CORS разработчики могут предотвратить чтение доменами-источниками информации, получаемой в результате запросов. Это обеспечивает дополнительный уровень защиты данных пользователя.

  5. CORS — это стандарт, который поддерживают большинство веб-браузеров. И, как стандарт, этот механизм обеспечивает единообразный и надежный способ управления кросс-доменными запросами.

Last updated