После прочтения о CORS я не понимаю, как это повышает безопасность.
CORS не повышает безопасность.CORS предоставляет механизмам, позволяющим серверам сообщать браузерам, как к ним должны обращаться внешние домены, и пытается сделать это таким образом, чтобы это соответствовало модели безопасности браузера, существовавшей до CORS (а именно Same Origin Policy * 1008).*).
Но Политика одного и того же происхождения и CORS имеют ограниченную область применения.В частности, спецификация CORS сама по себе не имеет механизма отклонения запросов.Он может использовать заголовки, чтобы указать браузеру не разрешать странице из чужого домена читать ответ.И, в случае предварительных запросов, он может попросить браузер не отправлять ему определенные запросы из чужого домена.Но CORS не указывает никаких средств, чтобы сервер отклонял (то есть не выполнял) фактический запрос.
Давайте рассмотрим пример.Пользователь зашел на сайт A
через cookie.Пользователь загружает вредоносный сайт M
, который пытается отправить форму с номерами от POST
до A
.Что случится?Хорошо, с или без CORS, а также с или без M
в качестве разрешенного домена, браузер отправит запрос на A
с файлом cookie авторизации пользователя, и сервер выполнит злонамеренный POST
, как если бы пользователь инициировалit.
Эта атака называется Подделка межсайтовых запросов , и сам CORS не предпринимает никаких действий по ее смягчению.Вот почему защита CSRF так важна, если вы разрешаете запросы на изменение данных от имени пользователей.
Теперь использование заголовка Origin
может быть важной частью вашей защиты CSRF.Действительно, проверка этого является частью текущей рекомендации по многоцелевой защите CSRF .Но это использование заголовка Origin
выходит за пределы спецификации CORS.
В общем, CORS является полезной спецификацией для расширения существующей модели безопасности политики Same Origin Policy на другие принятые домены.Это не добавляет безопасности, и сайтам нужны те же механизмы защиты, что и до CORS.