Content Security Policy (CSP) nedir? Nonce tabanlı strict bir CSP nasıl kurulur?

Cevap

CSP, sunucunun bir HTTP başlığıyla tarayıcıya hangi kaynaklardan script, stil, görsel vb. yüklenebileceğini söylemesidir. XSS açığı olsa bile enjekte edilen script'in çalışmasını engelleyen ikinci savunma hattıdır.

Domain allowlist yerine strict CSP

script-src https://cdn.example.com gibi listeler çoğu zaman aşılabilir (izinli CDN'de JSONP veya eski kütüphaneler). Google'ın önerdiği yaklaşım nonce + strict-dynamic'tir:

Content-Security-Policy:
  script-src 'nonce-R4nd0m123' 'strict-dynamic';
  object-src 'none';
  base-uri 'none';
  frame-ancestors 'self';
  report-to csp-endpoint
<script nonce="R4nd0m123" src="/app.js"></script>
  • Nonce her HTTP cevabında yeniden üretilen rastgele bir değerdir; saldırgan bilemez.
  • 'strict-dynamic': Nonce'lu script'in dinamik olarak yüklediği script'lere de güven aktarılır (bundler chunk'ları, analytics).
  • Inline onclick="..." handler'lar ve eval engellenir.
  • frame-ancestors clickjacking'e karşı korur (eski X-Frame-Options'ın yerini alır).

Pratik uygulama

  • Next.js'te nonce middleware/proxy içinde üretilip header'a ve <Script nonce>'a eklenir; nonce kullanmak sayfayı dinamik render'a zorlar. Statik sitelerde nonce yerine hash ('sha256-...') kullanılır.
  • Önce Content-Security-Policy-Report-Only ile yayına alın, ihlal raporlarını toplayın, sonra zorunlu hale getirin.
  • Trusted Types (require-trusted-types-for 'script') ile innerHTML gibi tehlikeli sink'lere sadece sanitize edilmiş değer verilmesini zorlayabilirsiniz (Chromium 83+, Safari 26+ ve 2026 başından beri Firefox; artık Baseline).

Sınırlamalar

CSP, XSS'i önlemenin yerine geçmez; escaping ve sanitization yine şarttır. 'unsafe-inline' ve 'unsafe-eval' eklemek korumanın büyük kısmını ortadan kaldırır.

  1. Bir URL'yi tarayıcıya yazıp Enter'a bastığınızda neler olur?OrtaTarayıcı & Web API'leriFrontend
  2. Web Worker nedir? Service Worker'dan farkı nedir?ZorTarayıcı & Web API'leriFrontend
  3. IntersectionObserver ne işe yarar? Örnek kullanım verin.OrtaTarayıcı & Web API'leriFrontend
  4. Tarayıcı önbelleği nasıl çalışır? Cache-Control başlıkları nelerdir?OrtaTarayıcı & Web API'leriFrontend
  5. localStorage, sessionStorage, cookie ve IndexedDB arasındaki farklar nelerdir?OrtaTarayıcı & Web API'leriFrontend
  6. script etiketinde async ile defer arasındaki fark nedir?KolayTarayıcı & Web API'leriFrontend

Bu konuda başka bir soru biliyor musun?

Mülakatta karşılaştığın soruları ekle, onaylandıktan sonra yayına alınsın.

Soru ekle