advanced
CORS, CSP и secure headers
Настраивайте CORS узко, внедряйте CSP как defense-in-depth policy и задавайте security headers для transport, framing, MIME sniffing и referrer behavior.
Security headers ужесточают поведение браузера. Внедряйте согласованным набором — пробелы оставляют дыры.
| Header | Назначение | |--------|------------| | Strict-Transport-Security | Принудительный HTTPS | | Content-Security-Policy | Ограничение origins script/style/load | | X-Content-Type-Options: nosniff | Блок MIME sniffing | | Referrer-Policy | Утечка referrer | | Permissions-Policy | Отключение неиспользуемых API |
app.use((_req, res, next) => {
res.setHeader('Strict-Transport-Security', 'max-age=31536000; includeSubDomains');
res.setHeader('X-Content-Type-Options', 'nosniff');
res.setHeader('Referrer-Policy', 'strict-origin-when-cross-origin');
res.setHeader('Content-Security-Policy', "default-src 'self'; frame-ancestors 'none'");
next();
});
CORS не authentication — узкий `Access-Control-Allow-Origin` для известных frontends. CSP дополняет output encoding; report-only → fix → enforce.
На интервью: CORS vs CSP; caveats HSTS preload; `X-XSS-Protection` устарел.
Типовые ошибки: permissive `default-src *`; Origin без валидации; нет HSTS на API subdomain в браузере.
Компромисс — между простотой, производительностью, безопасностью и эксплуатацией: назовите, что оптимизировали и какую цену приняли.
Чеклист:
- HSTS после полного HTTPS.
- CSP с nonces/hashes для inline scripts.
- Минимальный CORS allowlist; credentials — явный origin.
- Security headers в одном middleware.