Кросс-доменные запросы (CORS): защита от кражи данных в сети

BOOX

Стаж на ФС с 2012 года
Команда форума
Служба безопасности
Private Club
Регистрация
23/1/18
Сообщения
28.781
Репутация
11.595
Реакции
61.695
RUB
50
Современные реалии таковы, что веб-ресурсам необходимо взаимодействовать между собой и обмениваться информацией.


Но как при этом не нарушать политику безопасности браузера? Именно для этого используются кросс-доменные запросы (CORS). В статье рассказываем, как работает CORS и как этот механизм позволяет защититься от кражи данных.

utcotkt7p1cs4nt9wviq1q57p9frccmr.jpg


Что такое CORS и как он работает

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

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

Браузер отправляет предварительный запрос (preflight request) методом OPTIONS для проверки, разрешено ли выполнять запрос на этот домен.
  1. Сервер отвечает на предварительный запрос и разрешает или запрещает доступ к ресурсам.
  2. Если сервер разрешил доступ, браузер отправляет основной запрос (main request) и получает данные от сервера.

Таким образом, CORS policy обеспечивает безопасное взаимодействие между веб-приложениями, позволяя им делиться ресурсами и данными через разные домены.

Зачем нужен механизм CORS и как он помогает избежать кражи данных

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

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

При полном отсутствии CORS могут возникнуть следующие трудности:

  • Ограниченный доступ к API. Без CORS браузеры препятствуют доступу к ресурсам на других доменах через AJAX из-за политики одного источника. Это означает, что веб-приложения не смогут обращаться к API, размещенным на других доменах, что может ограничить их функциональность и способы взаимодействия.
  • Сложности в разработке. Разработчики часто используют разные домены или порты во время разработки и тестирования веб-приложений. Без CORS им приходится искать обходные пути, например, использовать прокси, для решения проблем с политикой одного источника, что усложняет процесс разработки.
  • Трудности с разделением ресурсов. Современные веб-приложения часто используют ресурсы (API, шрифты, стили и т. д.), размещенные на разных доменах. CORS предоставляет механизм для безопасного и контролируемого доступа к ним. Без CORS организации могут столкнуться с трудностями при попытке интегрировать внешние ресурсы в свои веб-приложения.

CORS работает путем добавления информации о правилах доступа к заголовкам HTTP запроса и ответа. Если сервер, на котором расположен ресурс, разрешает доступ с определенного домена, браузер позволит загрузить ресурс на веб-страницу.

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

Какие проблемы может вызвать неправильная настройка CORS и как их избежать

Неправильная настройка CORS может вызвать следующие проблемы:
  1. Невозможность доступа к ресурсам на другом домене из-за блокировки браузером (браузерная политика одного исходного источника — Same Origin Policy).
  2. Уязвимость к CSRF (Cross-Site Request Forgery) атакам из-за отсутствия защиты от таких атак.
  3. Возможность утечки конфиденциальных данных, если сервер неверно обрабатывает CORS запросы.
Чтобы избежать этих проблем, необходимо правильно настроить CORS на сервере. Вот несколько рекомендаций:
  • Установить разрешенные источники (Origin) для запросов или использовать знак "*" для разрешения доступа со всех источников.
  • Указать разрешенные методы запросов (GET, POST, PUT, DELETE и т. д.).
  • Отметить разрешенные заголовки, которые могут отправляться с запросом.
  • Использовать механизмы защиты от CSRF атак, например, добавление специального токена в запросы.
  • Тщательно проверять и валидировать данные, получаемые из CORS запросов, чтобы избежать утечки конфиденциальных данных.

Также рекомендуется использовать инструменты для тестирования безопасности CORS на своем веб-сервере, чтобы обнаружить и устранить возможные уязвимости.

Как защитить CORS от злоумышленников

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

Основной способ обхода CORS кроется в некорректной его настройке. Очень часто разрешения выдаются из позиции наибольшей совместимости, а не из соображений строгой безопасности. Например, администратор может открыть доступ к содержимому всего ресурса, хотя доступ нужен всего одной папке. Кроме этого, обойти CORS может помочь наличие уязвимостей XSS, или отправление кэша на стороне пользователя или сервера. CORS — это гибкий механизм для обеспечения безопасности взаимодействия между доменами, однако он требует вдумчивой и грамотной настройки.

Но это не единственная проблема, которая «открывает» злоумышленникам доступ к данным. Этому могут поспособствовать уязвимости в конфигурации CORS.

Выделяют несколько уязвимостей в конфигурации CORS:

  1. Отражение Origin в ответном заголовке сервера Access-Control-Allow-Origin. При динамичном росте внешней инфраструктуры и постоянном появлении новых поддоменов возникает проблема оперативного добавления приложений в CORS. Чтобы постоянно не актуализировать перечень поддоменов, разработчики могут включить значение заголовка Origin в Access-Control-Allow-Origin. Но из-за этого злоумышленник может получить доступ к ресурсам сайта из контролируемого домена.
  2. Значение null в белом списке. Использование значения null позволяет злоумышленнику провести атаку через схему data:// и file:// с использованием iframe.
  3. Использование регулярных выражений для парсинга заголовка Origin. Бывают также ситуации, когда разработчик использует регулярные выражения для парсинга Origin для формирования политики, например, [a-zA-Z0-9]*.vuln.com. Что, как и в предыдущем примере, позволяет злоумышленнику получить доступ к ресурсам сайта из контролируемого домена.

Также «обойти» механизм защиты от несанкционированного доступа злоумышленники могут с помощью прокси-сервера. Запрос к ресурсу на другом домене делается через прокси-сервер на том же домене, что и веб-приложение. Таким образом, браузер считает, что запрос отправлен на тот же домен, что и само приложение.

Еще один метод киберпреступников — JSONP (JSON with Padding). Он позволяет получать данные с другого домена путем добавления скрипта на страницу, который загружает данные и вызывает функцию обратного вызова для их обработки.

Защитить данные от JSONP и несанкционированного доступа через прокси-сервис помогут дополнительные меры безопасности:

  • проверка и фильтрация входящих данных;
  • защита от межсайтовых атак (XSS, CSRF);
  • использование HTTPS для шифрования данных и устранение уязвимостей на сервере.
Также важно следить за обновлением и конфигурацией сервера для обеспечения безопасности данных при обходе механизма CORS.

Чтобы усилить защиту сайта или приложения в дополнении к CORS, можно внедрить правила безопасности на стороне сервера.

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

  • на API-ручках необходимо сверять заголовок Referer со списком разрешенных и проверять на его наличие;
  • добавить флаг HttpOnly на файлы куки, которые используются для аутентификации пользователя;
  • поставить на куки атрибут SameSite со значением Lax или Strict.

CORS — это механизм, который помогает улучшить безопасность веб-приложения на стороне клиента, однако не следует полагаться на него как на единственный уровень защиты. CORS не убережет от межсайтового скриптинга (XSS), и при неправильной конфигурации может сделать сайт уязвимым для атак. Поэтому необходимо внедрить соответствующие правила безопасности и дополнительную защиту как на стороне клиента, так и на стороне сервера.



 
  • Теги
    cors preflight request веб-страница кросс-доменные запросы
  • Сверху Снизу