Какие политики безопасности кроме CORS существуют для защиты фронтенда и сервера
Что проверяют
Понимаете ли вы, от какой атаки защищает каждый механизм. Частая проверка на внимательность: CORS не защищает сервер, он ослабляет Same-Origin Policy для разрешённых источников. Следом обычно спрашивают, как внедрить CSP в живой проект и ничего не сломать.
Как отвечать
Отталкивайтесь от Same-Origin Policy как базового ограничения браузера, дальше по угрозам:
- Content Security Policy: главная защита от XSS. Скрипты разрешаются по nonce или хешу (
'strict-dynamic'), инлайн-обработчики запрещены. Директиваframe-ancestorsзащищает от clickjacking и заменяетX-Frame-Options. Внедряют черезContent-Security-Policy-Report-Only: собирают отчёты и только потом включают блокировку; - Trusted Types: не дают передавать строки в
innerHTMLи похожие места, закрывают DOM XSS; - HSTS:
Strict-Transport-Securityсmax-ageиincludeSubDomains, браузер перестаёт ходить на сайт по HTTP; - cookies:
HttpOnlyпротив кражи скриптом,Secure,SameSite=LaxилиStrictпротив CSRF. Для изменяющих запросов всё равно нужен CSRF-токен или проверкаOrigin; X-Content-Type-Options: nosniff: браузер не угадывает тип файла и не исполнит загруженную картинку как скрипт;- Referrer-Policy и Permissions-Policy: не отдавать полный URL чужим сайтам и отключить ненужные камеру, микрофон, геолокацию;
- COOP, COEP, CORP: изоляция от чужих окон и ресурсов, нужна для
SharedArrayBuffer; - Subresource Integrity: атрибут
integrityу скриптов с CDN, подменённый файл не выполнится.
На сервере к этому добавляются валидация ввода, rate limiting и проверка прав на каждый запрос: заголовки защищают браузер пользователя, но не API от прямых вызовов.
Где спотыкаются
Советуют X-XSS-Protection: 1; mode=block. Встроенный XSS-фильтр из браузеров убрали, сейчас заголовок либо не отправляют, либо ставят 0.
Считают, что CORS защищает API. Запрос из curl или с другого сервера CORS не проверяет вовсе, это механизм браузера.
Включают CSP с 'unsafe-inline' и 'unsafe-eval' ради совместимости и считают задачу решённой. Такая политика почти не мешает XSS.