Прочитавши про CORS, я не розумію, як це покращує безпеку.
CORS не покращує безпеку. CORS забезпечує механізм для серверів повідомляти браузерам про те, як вони повинні отримувати доступ до іноземних доменів, і намагається зробити це таким чином, що відповідає моделі безпеки браузера, яка існувала до CORS саме Політиці того походження ).
Але однакова політика походження та CORS мають обмежений обсяг. Зокрема, специфікація CORS не має механізму відхилення запитів. Він може використовувати заголовки, щоб сказати браузеру не дозволяти сторінці з іноземного домену прочитати відповідь. А у випадку попередніх запитів, він може попросити браузер не надсилати йому певні запити з іноземного домену. Але CORS не вказує жодних засобів для сервера відхилити (тобто не виконати) фактичний запит.
Візьмемо приклад. Користувач входить на сайт A
за допомогою файлів cookie. Користувач завантажує шкідливий сайт M
, який намагається надіслати форму, яка робить POST
до A
. Що станеться? Ну, з або без CORS, а також із M
дозволеним доменом чи без нього, браузер надішле запит наA
файлу cookie авторизації користувача, а сервер буде виконувати шкідливий, POST
як ніби користувач ініціював його.
Ця атака називається підробкою міжсайтових запитів , і сам CORS не робить нічого, щоб пом'якшити її. Ось чому захист CSRF настільки важливий, якщо ви дозволяєте запити на зміну даних від імені користувачів.
Тепер використання Origin
заголовка може бути важливою частиною вашого захисту CSRF. Дійсно, перевірка цього є частиною поточної рекомендації щодо багатостороннього захисту КСВФ . Але використання Origin
заголовка виходить за межі специфікації CORS.
Підсумовуючи, CORS є корисною специфікацією для розширення існуючої моделі захисту політики того самого походження на інші прийняті домени. Це не додає безпеки, і сайти потребують тих самих типів захисних механізмів, що і до CORS.