Дамир
Начинающий
- Регистрация
- Сообщения
- 9
- Реакции
- 0
В этой статье мы расскажем, что из себя представляет политика CORS и что такое CORS в целом, а также чем он полезен для разработчиков.
Для современных веб-приложений загрузка ресурсов с нескольких доменов является обычной практикой. Доступ к этим ресурсам осуществляется с помощью технологии CORS. Например, если вам нужно получить информацию о пользователе на своем сайте «www.mysite.com» с сервера, расположенного на сайте «api.website.com», вы должны отправить запрос на сервер и получить ответ в виде данных JSON.
В целях защиты браузеры ограничивают доступ из скриптов к другим ресурсам, существующим за пределами их домена, с помощью принципа одинакового источника (Same-Origin Policy, политика общего происхождения). Эта политика защищает от кражи личных данных с других веб-серверов или атаки с подделкой межсайтовых запросов (Cross-Site Request Forgery, CSRF).
В данном случае один источник, сайт злоумышленника, пытается получить доступ к ресурсу из источника – сайт онлайн-банка. Same-Origin Policy блокирует доступ киберпреступнику к вашим банковским данным.
Однако, правила ограничения домена ограничивает специалистам доступ к ресурсам из разных источников. Поэтому был разработан HTTP-протокол CORS, чтобы сообщать браузеру, что ограниченные ресурсы на веб-странице могут быть запрошены с других доменов.
Например, вот возможный сценарий запроса информации из внешнего источника, такого как API (распространенная практика для кода JavaScript на стороне клиента):
Некоторые примеры того, что вы можете делать с CORS, включают:
Давайте подробнее рассмотрим, как работают предварительные запросы.
Предварительный запрос
Предварительный запрос (Preflight request) — это дополнительный HTTP-запрос с использованием метода «OPTIONS». Браузер выполняет это для каждого небезопасного запроса, предназначенного для изменения данных, например запросов POST, PUT или DELETE.
Предварительный запрос является стандартным поведением для современных веб-браузеров. Ожидаемый ответ от приложения — это ответ, содержащий CORS-заголовки с правильными инструкциями.
Пример предварительного запроса:
Здесь мы видим несколько определенных HTTP-заголовков. Это одни из наиболее распространенных CORS-заголовков, используемых в запросах браузера и ответах сервера:
В этом случае мне нужно указать следующее:
Access-Control-Allow-Origin: https://mywebsite.com
Кроме того, добавление настраиваемого заголовка Access-Control-Allow-Origin в объектных хранилищах, таких как AWS S3 или Google Storage, оптимизирует пропускную способность, оптимизирУЕТ использование ресурсов и ускорит извлечение данных.
Access-Control-Allow-Origin также можно использовать, если другой сайт полностью копирует ваш, что негативно влияет на SEO вашего сайта. Таким образом, контент вашего веб-сайта не будет отображаться на зеркальном сайте. Но вы также можете подать заявление DMCA Takedown Notice, чтобы удалить свой контент с другого сайта, поскольку злоумышленник может обойти политику Access-Control-Allow-Origin с помощью прокси-сервера.
Символ «*» указывает браузеру разрешить доступ к ресурсу из любого источника, фактически отключая политику Same-Origin Policy. Это означает, что браузер не будет фильтровать источники. Любой код на любом сайте может сделать запрос к ресурсу (включая вредоносные домены).
Кроме того, символ «*» широко используется хакерами, особенно для веб-скиммеров. AJAX-запросы отправляются со страниц оформления заказа на взломанных сайтах на вредоносные серверы, которые передают украденные платежные реквизиты.
Например, этот JavaScript-скиммер для отправки украденных данных на сторонний сервер использует запрос из разных источников с соответствующими CORS-заголовками.
Часть эксфильтрации скиммера для кредитных карт JavaScript.
Вот пример CORS-заголовков, используемых для URL-адреса эксфильтрации веб-скиммера:
Для современных веб-приложений загрузка ресурсов с нескольких доменов является обычной практикой. Доступ к этим ресурсам осуществляется с помощью технологии CORS. Например, если вам нужно получить информацию о пользователе на своем сайте «www.mysite.com» с сервера, расположенного на сайте «api.website.com», вы должны отправить запрос на сервер и получить ответ в виде данных JSON.
Что такое CORS?
CORS (Cross-Origin Resource Sharin) – совместное использование ресурсов между разными источниками — это механизм, который дает разрешения на загрузку ресурсов из одного источника в другой, сохраняя при этом целостность сайта и защищая его от несанкционированного доступа. Современные браузеры используют это, чтобы определить, какие межсайтовые запросы безопасны.В целях защиты браузеры ограничивают доступ из скриптов к другим ресурсам, существующим за пределами их домена, с помощью принципа одинакового источника (Same-Origin Policy, политика общего происхождения). Эта политика защищает от кражи личных данных с других веб-серверов или атаки с подделкой межсайтовых запросов (Cross-Site Request Forgery, CSRF).
В данном случае один источник, сайт злоумышленника, пытается получить доступ к ресурсу из источника – сайт онлайн-банка. Same-Origin Policy блокирует доступ киберпреступнику к вашим банковским данным.
Однако, правила ограничения домена ограничивает специалистам доступ к ресурсам из разных источников. Поэтому был разработан HTTP-протокол CORS, чтобы сообщать браузеру, что ограниченные ресурсы на веб-странице могут быть запрошены с других доменов.
Например, вот возможный сценарий запроса информации из внешнего источника, такого как API (распространенная практика для кода JavaScript на стороне клиента):
- Источник ресурса делает предварительный запрос на внешний веб-сервер, используя заголовки CORS;
- Затем внешний веб-сервер проверяет этот предварительный запрос, чтобы убедиться, что сценариям разрешено делать запрос;
- После проверки внешний веб-сервер отвечает своим собственным набором HTTP-заголовков, которые определяют допустимые методы запроса, источники и настраиваемые заголовки. Ответ сервера может также включать информацию о том, допустимо ли передавать учетные данные, такие как заголовки проверки подлинности.
Для чего мне CORS?
Если вы хотите использовать ресурсы с другого сервера, помимо вашего собственного, вам потребуется использовать CORS.Некоторые примеры того, что вы можете делать с CORS, включают:
- Использование веб-шрифтов или таблиц стилей (Google Fonts или Typekit) с удаленного домена;
- Указание местоположения пользователей на карте через Google Map API: https://maps.googleapis.com/maps/api/js;
- Отображение твитов из дескриптора Twitter
API: https://api.twitter.com/xxx/tweets/xxxxx; - Использование Headless CMS для управления контентом;
- Доступ к любому API, размещенному на другом домене или поддомене.
Как работает CORS?
Работа CORS начинается, когда сценарий из одного источника отправляет запрос в другой источник. Все это контролируется с помощью предварительного запроса, который обменивается заголовками HTTP-запроса и заголовками ответов, которые называются «CORS-заголовки».Давайте подробнее рассмотрим, как работают предварительные запросы.
Предварительный запрос
Предварительный запрос (Preflight request) — это дополнительный HTTP-запрос с использованием метода «OPTIONS». Браузер выполняет это для каждого небезопасного запроса, предназначенного для изменения данных, например запросов POST, PUT или DELETE.
Предварительный запрос является стандартным поведением для современных веб-браузеров. Ожидаемый ответ от приложения — это ответ, содержащий CORS-заголовки с правильными инструкциями.
Пример предварительного запроса:
Здесь мы видим несколько определенных HTTP-заголовков. Это одни из наиболее распространенных CORS-заголовков, используемых в запросах браузера и ответах сервера:
- Access-Control-Allow-Origin
- Access-Control-Allow-Methods
- Access-Control-Allow-Headers
Access-Control-Allow-Origin
Представьте себе следующий сценарий: я хочу разрешить приложению, размещенному на https://mywebsite.com, доступ к ресурсу.В этом случае мне нужно указать следующее:
Access-Control-Allow-Origin: https://mywebsite.com
Кроме того, добавление настраиваемого заголовка Access-Control-Allow-Origin в объектных хранилищах, таких как AWS S3 или Google Storage, оптимизирует пропускную способность, оптимизирУЕТ использование ресурсов и ускорит извлечение данных.
Access-Control-Allow-Origin также можно использовать, если другой сайт полностью копирует ваш, что негативно влияет на SEO вашего сайта. Таким образом, контент вашего веб-сайта не будет отображаться на зеркальном сайте. Но вы также можете подать заявление DMCA Takedown Notice, чтобы удалить свой контент с другого сайта, поскольку злоумышленник может обойти политику Access-Control-Allow-Origin с помощью прокси-сервера.
Проблемы безопасности с Access-Control-Allow-Origin
Довольно часто можно найти приложения, использующие эту нотацию для Access-Control-Allow-Origin:Символ «*» указывает браузеру разрешить доступ к ресурсу из любого источника, фактически отключая политику Same-Origin Policy. Это означает, что браузер не будет фильтровать источники. Любой код на любом сайте может сделать запрос к ресурсу (включая вредоносные домены).
Кроме того, символ «*» широко используется хакерами, особенно для веб-скиммеров. AJAX-запросы отправляются со страниц оформления заказа на взломанных сайтах на вредоносные серверы, которые передают украденные платежные реквизиты.
Например, этот JavaScript-скиммер для отправки украденных данных на сторонний сервер использует запрос из разных источников с соответствующими CORS-заголовками.
Часть эксфильтрации скиммера для кредитных карт JavaScript.
Вот пример CORS-заголовков, используемых для URL-адреса эксфильтрации веб-скиммера: