advanced
CSRF, SSRF и clickjacking
Используйте SameSite или CSRF tokens для state changes, проверяйте outbound fetch targets и блокируйте UI framing через frame-ancestors или X-Frame-Options.
CSRF заставляет браузер жертвы отправить authenticated запросы без намерения пользователя. Защита: SameSite cookies, CSRF tokens на state-changing forms/API, custom headers для JSON mutations (браузер ограничивает cross-origin custom headers через preflight).
if (req.method !== 'GET' && req.body._csrf !== req.cookies.csrf) {
return res.status(403).json({ error: 'csrf' });
}
SSRF: сервер fetch'ит URL атакующего — internal metadata (`169.254.169.254`), Redis, admin panels. Блокируйте private IP, валидируйте схемы URL, allowlists, отдельные fetch proxy без доступа во внутреннюю сеть.
Clickjacking: прозрачный iframe для перехвата кликов. `Content-Security-Policy: frame-ancestors 'none'` или `X-Frame-Options: DENY`.
На интервью: CSRF менее критичен для pure Bearer API; SSRF в webhooks и PDF generators; когда хватает SameSite=Lax.
Типовые ошибки: GET с мутацией; SSRF в importers URL картинок; framing на sensitive pages.
Компромисс — между простотой, производительностью, безопасностью и эксплуатацией: назовите, что оптимизировали и какую цену приняли.
Чеклист:
- SameSite + CSRF token для cookie mutations.
- SSRF allowlists и block private IP на outbound fetch.
- frame-ancestors на authenticated UI.
- Аудит server-side URL fetch.