Кого пытается защитить CORS
Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
Какую цель защиты ставит CORS (Cross-Origin Resource Sharing)?
CORS — это механизм безопасности браузера, который защищает не сервер или клиента, а Пользователя и его данные.
Основная цель CORS — предотвратить злоупотребление доверием пользователя, которое возникает из-за архитектуры веб-приложений и поведения браузера. Это концепция, известная как Same-Origin Policy (SOP) — политика одинакового источника, фундамент безопасности веба. CORS является ее контролируемым и безопасным исключением.
Разберем "угрозу", которую устраняет SOP и контролирует CORS
-
Доверие пользователя к источнику (Origin): Когда пользователь посещает
https://bank.com, он доверяет этому домену и его скриптам. Браузер по умолчанию разрешает скриптам с этого домена (https://bank.com) читать ответы от API самогоhttps://bank.com. -
Уязвимость без SOP: Злонамеренный сайт
https://evil.comмог бы через скрипт на своей странице сделать "невидимый" запрос (например, через<img>илиfetch) кhttps://bank.com/api/accountи прочитать ответ, если бы не существовала SOP. Браузер пользователя автоматически отправляет cookies (включая сессионные) кbank.comс каждым таким запросом, потому что пользователь возможно уже авторизован там. Таким образом,evil.comмогла бы украсть приватные данные пользователя изbank.com, используя доверие пользователя кbank.com. -
Как SOP защищает: SOP блокирует скрипту с
https://evil.comвозможность читать ответ отhttps://bank.com. Запрос может быть отправлен (браузер всё равно отправит cookies!), но результат будет недоступен для JavaScript наevil.com.
// Код, исполняемый на странице https://evil.com
fetch('https://bank.com/api/account')
.then(response => response.json())
.then(data => {
// SOP (и CORS) БЛОКИРУЕТ выполнение этого кода!
// Мы не сможем прочитать `data`, даже если запрос технически отправлен.
console.log(data); // Не будет исполнено, будет ошибка CORS.
});
Роль CORS: предоставить безопасный способ для легального взаимодействия
CORS появляется, когда легальному фронтенду (https://myapp.com) нужен доступ к API другого домена (https://api.service.com). CORS позволяет api.service.com явно объявить: "Я доверяю myapp.com и разрешаю ему читать мои ответы".
Это реализуется через специальные HTTP-заголовки, которые сервер добавляет в свои ответы.
# Ответ от https://api.service.com на запрос от https://myapp.com
Access-Control-Allow-Origin: https://myapp.com # Ключевой заголовок
Access-Control-Allow-Credentials: true # Если нужно разрешить cookies
Access-Control-Allow-Methods: GET, POST, PUT # Разрешенные методы
Без этих заголовков браузер пользователя, исполняющий код с myapp.com, заблокирует чтение ответа от api.service.com, защитив таким образом потенциальные данные пользователя в api.service.com от неправомочного доступа.
Кого конкретно защищает этот механизм?
- Пользователя (End User): От кражи его приватных данных (сессий, токенов, личной информации) одним сайтом (
evil.com) через его авторизацию на другом сайте (bank.com). - Владельцев ресурсов (Resource Owners): Сервер
api.service.comполучает инструмент для контроля, кому он разрешает доступ к своим данным. Он может быть уверен, что только доверенные домены (myapp.com) смогут использовать его API в браузерах пользователей. - Интеграцию легальных сервисов: CORS, вопреки частому заблуждению, не "защищает сервер от запросов". Сервер всегда получает запрос (если он доходит до него). CORS дает браузеру правила, по которым он должен защитить пользователя, разрешая или запрещая клиентскому скрипту прочитать ответ сервера.
Итог: CORS — это браузерный механизм, который защищает пользователя и его данные от неавторизированного межсайтового доступа, предоставляя серверу возможность безопасно разрешить такой доступ легальным партнерам. Он предотвращает сценарий, где злонамеренный сайт может использовать авторизацию пользователя на другом сайте для кражи данных, используя браузер пользователя как инструмент атаки.