В двух словах
CSRF заставляет браузер отправить нежелательный state-changing запрос с ambient credentials (cookies сессии).
Защита слоями
- Cookies с
SameSite (Lax/Strict по модели).
- Непредсказуемый CSRF-токен или custom-header паттерн для мутаций.
- Серверные проверки
Origin/Referer или Fetch Metadata.
CORS сам по себе не CSRF-защита: простые cross-origin запросы и HTML-формы всё равно уходят.
Set-Cookie: session=...; HttpOnly; Secure; SameSite=Lax
Итог: CSRF = чужой сайт триггерит запрос с твоими cookies. SameSite + токен/заголовок + Origin-checks.