Перейти к содержимому
>_ITDITDПлатформа веб-безопасности

Глоссарий

Что такое CORS — как он работает и что открывает неправильная настройка

CORS управляет тем, может ли JavaScript одного сайта читать ответы API другого источника. Неправильная настройка CORS позволяет стороннему сайту читать данные вошедшего пользователя. Безопасно: allowlist, не отражать Origin, не смешивать * и куки.

Опубликовано 2026-06-11 Обновлено 2026-06-11 3 мин чтения

«Я добавил Access-Control-Allow-Origin, и API заработал — это безопасно?» CORS — это не «добавил и готово»; суть в том, чтобы сузить, кому вы разрешаете. Разберём, как он работает и как настроить его безопасно (без шагов атаки).

Сначала о том, как это работает

Браузеры применяют политику одного источника: JS другого источника не может свободно читать ответы другого сайта. CORS существует, чтобы открыть это исключение только тем, кому сервер явно разрешает.

Заголовок ответаЗначение
Access-Control-Allow-OriginКаким источникам можно читать ответ
Access-Control-Allow-CredentialsРазрешены ли запросы с учётными данными (куками)
Access-Control-Allow-Methods / -HeadersКакие HTTP-методы/заголовки разрешены

Суть: CORS находится на стороне «ослабления ограничения». Ослабьте его неверно — и данные, которые не должны быть читаемы, становятся читаемыми для третьих сторон.

Что делает настройку опасной

Опасные настройки (частые)

  • Отражение Origin запроса обратно как разрешённого
  • Access-Control-Allow-Origin: * плюс разрешение учётных данных
  • Открытие API широко кросс-доменно, когда это не нужно

Безопасные настройки

  • Allowlist (только фиксированные доверенные источники)
  • Запрет по умолчанию для всего остального
  • Для запросов с учётными данными — конкретный источник, а не *
JS сайта злоумышленника запрашивает ваш API (пользователь вошёл в систему)
↓ сервер вслепую разрешает Origin (неправильная настройка)
браузер разрешает чтение ответа = персональные данные/токены попадают на сайт злоумышленника
При слабой настройке JS сайта злоумышленника может использовать активный сеанс пользователя, чтобы прочитать ответ API.

Основы безопасной настройки

1

Используйте allowlist (самое важное)

Разрешайте только заранее определённые доверенные источники и запрещайте остальное (запрет по умолчанию). Не «разрешайте просто всё».
2

Не отражайте Origin вслепую

Не подставляйте Origin запроса прямиком в Access-Control-Allow-Origin. Возвращайте его только когда он совпадает с allowlist.
3

Никогда не используйте * с учётными данными

Не сочетайте Access-Control-Allow-Origin: * с Allow-Credentials: true. Вместо этого указывайте конкретный источник.
4

Минимизируйте то, что открываете

Только эндпоинты, которым действительно нужно быть кросс-доменными. Не открывайте широко. Проверьте свои настройки проверщиком заголовков безопасности.

Мнение этого сайта: CORS — это «как ослабляешь», а не «защита» — сужайте, кому открываете

Частое заблуждение — «добавление заголовков CORS делает безопасно». Всё наоборот — CORS ослабляет ограничение браузера. Поэтому хитрость не в том, «как добавить», а в том, чтобы «минимизировать, кому и насколько широко открываешь.» На этом сайте мы отделяем данные, которые можно читать извне, от тех, которые нельзя, и рекомендуем запрет по умолчанию с allowlist, открывающим только исключения. Заметьте, что XSS (который ломает предпосылку о чтении) и CSRF (который нацелен на изменения состояния) — это отдельные уязвимости: один лишь CORS не покрывает всё.

Читать дальше

FAQ

QДля чего нужен CORS?
A

Браузеры применяют политику одного источника: JavaScript одного источника (сайта) не может свободно читать ответы другого сайта. CORS (Cross-Origin Resource Sharing) — это то, как сервер открывает исключение из этого правила, но только тем, кому явно разрешает. Заголовки ответа вроде Access-Control-Allow-Origin объявляют, каким источникам можно читать ответ.

QЧто открывает неправильная настройка CORS?
A

Слишком слабые разрешения могут позволить сайту злоумышленника читать через JavaScript ответы API пользователя с активным сеансом. Классические случаи: отражение Origin запроса обратно как разрешённого или установка Access-Control-Allow-Origin в * при одновременном разрешении учётных данных (кук). В результате персональные данные или токены могут попасть на сторонний сайт.

QЧто лежит в основе безопасной настройки?
A

Allowlist. Разрешайте только заранее определённые доверенные источники, а остальное запрещайте (запрет по умолчанию). Не отражайте Origin запроса вслепую. Для запросов с учётными данными не используйте * в Access-Control-Allow-Origin — указывайте конкретный источник. И открывайте кросс-доменно только те эндпоинты, которым это действительно нужно.