Современные реалии таковы, что веб-ресурсам необходимо взаимодействовать между собой и обмениваться информацией.
Но как при этом не нарушать политику безопасности браузера? Именно для этого используются кросс-доменные запросы (CORS). В статье рассказываем, как работает CORS и как этот механизм позволяет защититься от кражи данных.
Как работает CORS:
Браузер отправляет предварительный запрос (preflight request) методом OPTIONS для проверки, разрешено ли выполнять запрос на этот домен.
Таким образом, CORS policy обеспечивает безопасное взаимодействие между веб-приложениями, позволяя им делиться ресурсами и данными через разные домены.
CORS работает путем добавления информации о правилах доступа к заголовкам HTTP запроса и ответа. Если сервер, на котором расположен ресурс, разрешает доступ с определенного домена, браузер позволит загрузить ресурс на веб-страницу.
Благодаря механизму CORS, данные на веб-странице остаются защищенными от несанкционированного доступа, что помогает предотвратить кражу и злоупотребление информацией.
Также рекомендуется использовать инструменты для тестирования безопасности CORS на своем веб-сервере, чтобы обнаружить и устранить возможные уязвимости.
Но это не единственная проблема, которая «открывает» злоумышленникам доступ к данным. Этому могут поспособствовать уязвимости в конфигурации CORS.
Также «обойти» механизм защиты от несанкционированного доступа злоумышленники могут с помощью прокси-сервера. Запрос к ресурсу на другом домене делается через прокси-сервер на том же домене, что и веб-приложение. Таким образом, браузер считает, что запрос отправлен на тот же домен, что и само приложение.
Еще один метод киберпреступников — JSONP (JSON with Padding). Он позволяет получать данные с другого домена путем добавления скрипта на страницу, который загружает данные и вызывает функцию обратного вызова для их обработки.
Чтобы усилить защиту сайта или приложения в дополнении к CORS, можно внедрить правила безопасности на стороне сервера.
CORS — это механизм, который помогает улучшить безопасность веб-приложения на стороне клиента, однако не следует полагаться на него как на единственный уровень защиты. CORS не убережет от межсайтового скриптинга (XSS), и при неправильной конфигурации может сделать сайт уязвимым для атак. Поэтому необходимо внедрить соответствующие правила безопасности и дополнительную защиту как на стороне клиента, так и на стороне сервера.
Но как при этом не нарушать политику безопасности браузера? Именно для этого используются кросс-доменные запросы (CORS). В статье рассказываем, как работает CORS и как этот механизм позволяет защититься от кражи данных.
Что такое CORS и как он работает
CORS (Cross-Origin Resource Sharing) — это механизм, который позволяет веб-страницам делать запросы на другой домен, чем тот, с которого была загружена страница. Это важно для безопасности веб-приложений, так как без CORS браузеры не позволяют выполнение запросов на другие домены из соображений безопасности.Как работает CORS:
Браузер отправляет предварительный запрос (preflight request) методом OPTIONS для проверки, разрешено ли выполнять запрос на этот домен.
- Сервер отвечает на предварительный запрос и разрешает или запрещает доступ к ресурсам.
- Если сервер разрешил доступ, браузер отправляет основной запрос (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 может вызвать следующие проблемы:- Невозможность доступа к ресурсам на другом домене из-за блокировки браузером (браузерная политика одного исходного источника — Same Origin Policy).
- Уязвимость к CSRF (Cross-Site Request Forgery) атакам из-за отсутствия защиты от таких атак.
- Возможность утечки конфиденциальных данных, если сервер неверно обрабатывает CORS запросы.
- Установить разрешенные источники (Origin) для запросов или использовать знак "*" для разрешения доступа со всех источников.
- Указать разрешенные методы запросов (GET, POST, PUT, DELETE и т. д.).
- Отметить разрешенные заголовки, которые могут отправляться с запросом.
- Использовать механизмы защиты от CSRF атак, например, добавление специального токена в запросы.
- Тщательно проверять и валидировать данные, получаемые из CORS запросов, чтобы избежать утечки конфиденциальных данных.
Также рекомендуется использовать инструменты для тестирования безопасности CORS на своем веб-сервере, чтобы обнаружить и устранить возможные уязвимости.
Как защитить CORS от злоумышленников
Механизм CORS предназначен для защиты веб-приложений от атак, связанных с запросами к ресурсам на других доменах. Но злоумышленники могут обойти и его. Особенно если CORS настроен неправильно.Основной способ обхода CORS кроется в некорректной его настройке. Очень часто разрешения выдаются из позиции наибольшей совместимости, а не из соображений строгой безопасности. Например, администратор может открыть доступ к содержимому всего ресурса, хотя доступ нужен всего одной папке. Кроме этого, обойти CORS может помочь наличие уязвимостей XSS, или отправление кэша на стороне пользователя или сервера. CORS — это гибкий механизм для обеспечения безопасности взаимодействия между доменами, однако он требует вдумчивой и грамотной настройки.
Но это не единственная проблема, которая «открывает» злоумышленникам доступ к данным. Этому могут поспособствовать уязвимости в конфигурации CORS.
Выделяют несколько уязвимостей в конфигурации CORS:
- Отражение Origin в ответном заголовке сервера Access-Control-Allow-Origin. При динамичном росте внешней инфраструктуры и постоянном появлении новых поддоменов возникает проблема оперативного добавления приложений в CORS. Чтобы постоянно не актуализировать перечень поддоменов, разработчики могут включить значение заголовка Origin в Access-Control-Allow-Origin. Но из-за этого злоумышленник может получить доступ к ресурсам сайта из контролируемого домена.
- Значение null в белом списке. Использование значения null позволяет злоумышленнику провести атаку через схему data:// и file:// с использованием iframe.
- Использование регулярных выражений для парсинга заголовка Origin. Бывают также ситуации, когда разработчик использует регулярные выражения для парсинга Origin для формирования политики, например, [a-zA-Z0-9]*.vuln.com. Что, как и в предыдущем примере, позволяет злоумышленнику получить доступ к ресурсам сайта из контролируемого домена.
Также «обойти» механизм защиты от несанкционированного доступа злоумышленники могут с помощью прокси-сервера. Запрос к ресурсу на другом домене делается через прокси-сервер на том же домене, что и веб-приложение. Таким образом, браузер считает, что запрос отправлен на тот же домен, что и само приложение.
Еще один метод киберпреступников — JSONP (JSON with Padding). Он позволяет получать данные с другого домена путем добавления скрипта на страницу, который загружает данные и вызывает функцию обратного вызова для их обработки.
Защитить данные от JSONP и несанкционированного доступа через прокси-сервис помогут дополнительные меры безопасности:
Также важно следить за обновлением и конфигурацией сервера для обеспечения безопасности данных при обходе механизма CORS.
- проверка и фильтрация входящих данных;
- защита от межсайтовых атак (XSS, CSRF);
- использование HTTPS для шифрования данных и устранение уязвимостей на сервере.
Чтобы усилить защиту сайта или приложения в дополнении к CORS, можно внедрить правила безопасности на стороне сервера.
Помимо составления белого списка доменов, в который будут входить только проверенные сервисы и санитизации абсолютно всех данные, которые может контролировать пользователь, можно добавить несколько правил безопасности на стороне сервиса:
- на API-ручках необходимо сверять заголовок Referer со списком разрешенных и проверять на его наличие;
- добавить флаг HttpOnly на файлы куки, которые используются для аутентификации пользователя;
- поставить на куки атрибут SameSite со значением Lax или Strict.
CORS — это механизм, который помогает улучшить безопасность веб-приложения на стороне клиента, однако не следует полагаться на него как на единственный уровень защиты. CORS не убережет от межсайтового скриптинга (XSS), и при неправильной конфигурации может сделать сайт уязвимым для атак. Поэтому необходимо внедрить соответствующие правила безопасности и дополнительную защиту как на стороне клиента, так и на стороне сервера.
Для просмотра ссылки необходимо нажать
Вход или Регистрация