Почему разработчики не понимают CORS

CORS — один из самых неправильно понимаемых инструментов безопасности в веб-разработке. Многие разработчики думают, что он защищает их сервер. Это не так.

CORS защищает пользователя.

Браузер применяет политику единого источника (Same-Origin Policy, SOP). Эта политика мешает вредоносным сайтам отправлять запросы на другие сайты от вашего имени. CORS — это просто способ, с помощью которого сервер сообщает браузеру, что это правило можно ослабить для определенных сайтов.

Если ваш запрос работает в Postman, но не проходит в браузере, значит, у вас проблема с CORS. Postman не является браузером, поэтому он не применяет эти правила.

Распространенные ошибки, которых следует избегать:

  • Использование CORS как единственного средства защиты. CORS — это не аутентификация. Вам все равно нужны токены, пароли и ограничение частоты запросов (rate limiting).
  • Ловушка подстановочного знака (wildcard). Вы не можете использовать Access-Control-Allow-Origin: * , если вам нужно отправлять куки или учетные данные. Вы должны указать точный домен.
  • Игнорирование предварительных (preflight) запросов. Браузеры отправляют автоматический запрос OPTIONS перед многими вызовами API. Если ваш сервер блокирует OPTIONS, ваш основной запрос завершится ошибкой.
  • Отсутствие заголовков ошибок. Если ваш API возвращает ошибку 401 или 500 без заголовков CORS, браузер скроет реальную ошибку. Вы увидите только общее сообщение о CORS.

Как это исправить:

  • Обрабатывайте запросы OPTIONS. Убедитесь, что ваш сервер возвращает статус 200 или 204 для предварительных вызовов.
  • Используйте middleware. Настройте CORS на уровне middleware, чтобы он охватывал все ответы, включая ошибки.
  • Установите заголовок Vary. Если вы динамически разрешаете несколько источников (origins), вы должны добавить Vary: Origin в свой ответ.
  • Используйте правильные инструменты. Для Node.js используйте пакет cors. Для Django используйте django-cors-headers.

Перестаньте пытаться обойти CORS с помощью расширений для браузера. Вместо этого исправьте конфигурацию своего сервера.

Источник: https://dev.to/onsen/why-developers-dont-understand-cors-and-how-to-fix-it-19d5

Дополнительное обучающее сообщество: https://t.me/GyaanSetuAi