Проверка CORS

Проверьте настройки Cross-Origin Resource Sharing (CORS) для любого URL. Изучите заголовки ответа Access-Control-*, выполните опциональный предварительный запрос (OPTIONS) с пользовательскими Origin/методом/заголовками и выявите типичные ошибки конфигурации, такие как wildcard + credentials, отсутствие Vary: Origin или слишком широкие allow-headers.

Loading…

О сервисе CORS Checker

Вставьте URL API или страницы и проверьте, разрешат ли браузеры кросс-доменные запросы. Этот инструмент анализирует заголовки ответа CORS, может выполнить реалистичную проверку предварительного запроса (OPTIONS) и выделяет рискованные или некорректные конфигурации (например, "*" с credentials, отсутствие Vary: Origin или слабые allow-methods/allow-headers).

Возможности

  • Проверка заголовков CORS для любого публичного URL (Access-Control-* и связанные заголовки).
  • Опциональная симуляция предварительного запроса (OPTIONS) с пользовательскими Origin, методом запроса и заголовками запроса.
  • Следование редиректам (до 10), чтобы проверить конечную точку, которую фактически достигнут браузеры.
  • Просмотр исходных заголовков для полной прозрачности и отладки.
  • Результаты + оценочная карта с фильтром "только проблемы" для быстрой сортировки.
  • Анализ Vary для выявления отсутствия Vary: Origin и других проблем с кешированием в CORS.
  • Экспорт результатов в виде JSON и PDF-отчетов для аудитов, тикетов и документации.
  • Встроенные рекомендации для типичных проблем: wildcard+credentials, отражение Origin, null Origin, отсутствие allow-methods/allow-headers, отсутствие max-age и слишком широкие allow-headers.

🧭 Как использовать for cors-checker

1

Введите целевой URL

Вставьте конечную точку, которую хотите протестировать (например, https://api.example.com/resource).

2

Укажите Origin, с которого тестируете

Введите Origin вашего фронтенд-приложения (схема + хост), например, https://app.example.com. Это значение, которое браузеры отправляют в заголовке Origin.

3

Выберите режим проверки

Используйте Авто (рекомендуется) для анализа как заголовков ответа, так и поведения предварительного запроса. Используйте Простой запрос, если вам нужен сценарий без предварительного запроса, или Только предварительный запрос для выполнения проверок OPTIONS.

4

Настройте детали предварительного запроса (если применимо)

Включите "Выполнить предварительный запрос (OPTIONS)" и укажите Метод запроса и Заголовки запроса (через запятую), чтобы симулировать реальное поведение предварительного запроса браузера (например, authorization, content-type). Переключите "Учитывать credentials", если ваш сценарий включает куки или заголовки авторизации.

5

Просмотрите результаты и экспортируйте

Проверьте результаты/оценочную карту и детали анализа CORS. Включите "Показать исходные заголовки" при отладке. Экспортируйте JSON/PDF для обмена или хранения в аудитах.

Технические характеристики

Модель запроса

Инструмент проверяет заголовки CORS для целевого URL и может опционально выполнить предварительный запрос (OPTIONS), используя предоставленные Origin, метод и запрошенные заголовки. Поддерживается следование редиректам.

НастройкаПоведениеПо умолчанию
Режим проверкиАвто, Простой запрос или Только предварительныйАвто
Выполнить предварительный запрос (OPTIONS)Если включено, выполняет симуляцию предварительного запроса OPTIONSВключено
Источник (Origin)Значение заголовка Origin, используемое для анализа/предварительного запросаhttps://example.com
Метод запросаЗначение Access-Control-Request-Method для предварительного запросаGET
Заголовки запросаAccess-Control-Request-Headers (через запятую) для предварительного запросаПусто
Следовать редиректамСледует по цепочке редиректов до конечного URLВключено
Макс. редиректовОграничение редиректов для предотвращения зацикливания10 (диапазон 0–20)
ТаймаутЛимит таймаута запроса15000 мс
User-AgentИдентифицирует пользовательский агент запросаEncode64Bot/1.0 (+https://encode64.com)
Частные сетиБлокирует доступ к диапазонам частных сетей для безопасностиОтключено (частные сети не разрешены)

Проанализированные заголовки (основной набор CORS)

Анализатор фокусируется на стандартных заголовках ответа и запроса CORS, используемых браузерами и предварительными проверками.

ЗаголовокНазначение
Access-Control-Allow-OriginКакие источники (Origin) разрешены
Access-Control-Allow-CredentialsРазрешены ли куки/учётные данные (требует не шаблонного origin)
Access-Control-Allow-MethodsМетоды, разрешённые для кросс-доменных запросов (важно для предварительных запросов)
Access-Control-Allow-HeadersРазрешённые заголовки (важно для Authorization и пользовательских заголовков)
Access-Control-Expose-HeadersКакие заголовки доступны для чтения JS в браузере
Access-Control-Max-AgeКак долго браузер может кэшировать предварительный запрос
VaryВариация ключа кэша (например, Vary: Origin) для предотвращения отравления/смешивания кэша
Origin / Access-Control-Request-*Используется для имитации поведения предварительного запроса

Эвристики (распространённые проблемы CORS)

Результаты основаны на практических и ориентированных на безопасность проверках для обнаружения сломанных или рискованных конфигураций CORS.

ПроверкаПочему это важно
Подстановка + учётные данныеAccess-Control-Allow-Origin: * нельзя использовать с учётными данными; браузеры заблокируют или поведение будет небезопасным
Отсутствует Vary: OriginЕсли ответы различаются в зависимости от Origin, но не кэшируются правильно, общие кэши могут смешивать ответы между сайтами
Отражение OriginСлепое эхо Origin может непреднамеренно разрешить ненадёжные источники
Предупреждения о Null OriginOrigin: null может появляться в изолированных iframe или файловых контекстах; разрешение этого часто рискованно
Отсутствуют Allow-Methods / Allow-HeadersПредварительный запрос может завершиться неудачей, если сервер явно не разрешает метод/заголовки
Слишком широкие Allow-HeadersРазрешение слишком большого количества заголовков может расширить поверхность атаки
Отсутствует Max-AgeПредварительные запросы могут выполняться слишком часто, увеличивая задержку
CORS — это механизм принуждения в браузере. Серверы всё ещё могут быть доступны кросс-доменно через небраузерные клиенты; рассматривайте CORS как часть общей стратегии безопасности, а не единственный контроль.

Командная строка

Используйте эти команды для воспроизведения поведения CORS и предварительных запросов из вашего терминала. Они полезны для отладки и проверки того, что сообщает инструмент.

macOS / Linux

Проверить заголовки CORS для обычного запроса (симулировать Origin браузера)

curl -i -H "Origin: https://example.com" https://api.example.com/resource

Ищите Access-Control-Allow-Origin, Access-Control-Allow-Credentials и Vary.

Выполнить предварительный запрос OPTIONS (метод + заголовки)

curl -i -X OPTIONS -H "Origin: https://app.example.com" -H "Access-Control-Request-Method: POST" -H "Access-Control-Request-Headers: authorization, content-type" https://api.example.com/private

Предварительный запрос должен вернуть правильные Access-Control-Allow-Methods и Access-Control-Allow-Headers, чтобы браузер мог продолжить.

Следовать редиректам при проверке заголовков

curl -iL -H "Origin: https://example.com" https://api.example.com

Полезно, когда конечные точки перенаправляют на другой хост с другими правилами CORS.

Windows (PowerShell)

Проверить заголовки ответа с заголовком Origin

$r = Invoke-WebRequest -Uri https://api.example.com/resource -Headers @{ Origin = "https://example.com" }; $r.Headers

Отображает заголовки Access-Control-*, если они присутствуют.

Если ваш фронтенд использует куки или аутентификацию, избегайте разрешительной политики CORS. Предпочитайте явный список доверенных источников и включайте Vary: Origin, когда ответы различаются в зависимости от источника.

Примеры использования

Отладка ошибки браузера "CORS заблокирован" во фронтенде

Когда fetch/XHR завершается ошибкой CORS, проверьте, возвращает ли сервер необходимые заголовки Access-Control-* для вашего Origin и типа запроса.

  • Подтвердите, что Access-Control-Allow-Origin соответствует источнику вашего приложения
  • Если используются куки/аутентификация, проверьте, что Access-Control-Allow-Credentials равен true (и источник не является подстановочным знаком)
  • Убедитесь, что присутствует Vary: Origin при разрешении нескольких источников

Проверка предварительного запроса для Authorization / пользовательских заголовков

Большинство аутентифицированных вызовов API запускают предварительный запрос из-за Authorization или нестандартных типов контента. Этот инструмент помогает убедиться, что ответы OPTIONS разрешают требуемый метод и заголовки.

  • Убедитесь, что Access-Control-Allow-Methods включает POST/PUT/PATCH/DELETE по необходимости
  • Убедитесь, что Access-Control-Allow-Headers включает authorization, content-type и необходимые X-* заголовки
  • Обнаружьте отсутствие allow-methods/allow-headers до развертывания

Проверка безопасности политики CORS

Неправильные настройки CORS могут непреднамеренно раскрыть приватные API вредоносным сайтам (особенно с учётными данными). Используйте результаты, чтобы выявить рискованные шаблоны.

  • Обнаружьте подстановочный источник в сочетании с учётными данными
  • Обнаружьте шаблоны отражения источника, которые разрешают произвольные сайты
  • Отметьте разрешение Origin: null, если оно не предполагалось

Улучшение производительности за счёт кэширования предварительного запроса

Предварительные запросы добавляют циклы обмена и задержку. Правильный Max-Age может сократить повторные проверки предварительных запросов для стабильных API.

  • Убедитесь, что Access-Control-Max-Age присутствует, когда это уместно
  • Сократите повторные вызовы OPTIONS для частого трафика API

❓ Frequently Asked Questions

Что такое CORS простыми словами?

CORS (Cross-Origin Resource Sharing) — это механизм безопасности браузера, который контролирует, может ли веб-страница из одного источника (схема + хост + порт) читать ответы из другого источника. Он полагается на определённые заголовки ответа Access-Control-*.

Когда браузер отправляет предварительный запрос (OPTIONS)?

Предварительный запрос отправляется, когда запрос не является «простым», например, при использовании методов вроде POST с определёнными типами контента или при отправке заголовков вроде Authorization или пользовательских X-* заголовков. Браузер проверяет разрешения через OPTIONS перед отправкой реального запроса.

Почему "Access-Control-Allow-Origin: *" опасен с учётными данными?

Браузеры требуют явного источника при использовании учётных данных. Использование подстановочного знака с учётными данными недопустимо для запросов с учётными данными и указывает на рискованную конфигурацию. Предпочитайте явный список доверенных источников.

Зачем нужен Vary: Origin?

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

Может ли CORS защитить мой API от клиентов вне браузера?

Нет. CORS применяется браузерами. Скрипты, работающие вне браузера (серверы, curl, мобильные приложения), могут обращаться к вашему API независимо от CORS. Для реального контроля доступа используйте аутентификацию, авторизацию и ограничение частоты запросов.

Что указывать в «Заголовках запроса» при тестировании предварительного запроса?

Перечислите заголовки, которые будет отправлять ваш фронтенд, через запятую (например, authorization, content-type, x-request-id). Это имитирует Access-Control-Request-Headers и проверяет, разрешает ли их сервер.

Безопасно ли вставлять сюда URL-адреса?

Инструмент выполняет серверные запросы к предоставленному URL и блокирует цели в частных сетях. Избегайте включения секретов в URL (например, токенов в строке запроса) и предпочитайте публичные конечные точки, которым вы доверяете.

Pro Tips

Security Tip

Предпочитайте белый список доверенных источников вместо отражения любого Origin. Относитесь к CORS как к конфигурации, критичной для безопасности.

Security Tip

Если вы используете куки/аутентификацию, установите Access-Control-Allow-Credentials: true И возвращайте явный источник (не «*»).

Security Tip

Добавьте Vary: Origin при разрешении нескольких источников или динамическом выборе разрешённого источника.

Performance Tip

Установите разумное значение Access-Control-Max-Age, чтобы снизить задержку предварительных запросов для стабильных API.

Best Practice

Тестируйте как путь предварительного, так и реального запроса; некоторые настройки возвращают правильные заголовки для GET, но не для OPTIONS.

CI Tip

Экспортируйте JSON-отчёты и храните их вместе с изменениями конфигурации API-шлюза, чтобы быстро обнаруживать регрессии.

Additional Resources

Other Tools

CORS Checker — проверка заголовков Access-Control-* и предварительных запросов (OPTIONS) | Encode64