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.