Content Security Policy: gerçekten koruyan bir politika yazmak

Content-Security-Policy tarayıcıya hangi script'leri çalıştırabileceğini söyler. İyi yapıldığında enjekte edilen bir <script> çalışmaz. Gevşek yapıldığında header oradadır ve hiçbir şeyi korumaz.

Örnek

Zafiyetli
Content-Security-Policy: default-src * 'unsafe-inline' 'unsafe-eval'
Güvenli
Content-Security-Policy: default-src 'self'; script-src 'self' 'nonce-{random}' 'strict-dynamic'; object-src 'none'; base-uri 'self'; frame-ancestors 'self'; upgrade-insecure-requests

CSP'yi ne zayıflatır

script-src'deki 'unsafe-inline' tam da bir injection'ın ürettiği satır içi script'lere ve event handler'lara izin verir. 'unsafe-eval' string'lerin koda dönüşmesine izin verir. *, https: veya data: gibi kaynaklar her host'tan script'e izin verir. script-src veya default-src içermeyen bir politika script'leri hiç kısıtlamaz; yalnızca rapor modundaki bir politika hiçbir şeyi engellemez. Eksik object-src 'none' ve base-uri iki eski atlatma yolunu açık bırakır.

Nasıl kurulur

Rapor modunda sıkı başla, raporlananları düzelt, sonra uygula.

  • Script'lerinde yanıt başına bir nonce, yükledikleri script'ler için 'strict-dynamic' kullan
  • object-src 'none'; base-uri 'self'; frame-ancestors 'self' ekle
  • Satır içi event handler'ları script dosyalarına taşı
  • Header olarak gönder — frame-ancestors meta etiketinde çalışmaz

RepoVerse bunu nasıl bulur

  • OrtaContent-Security-Policy yok

    Herhangi bir sayfada injection hatası varsa enjekte edilen script'i durduracak hiçbir şey yok — bir XSS'in neler yapabileceğini sınırlayan katman CSP'dir.

    web sitesi · CWE-693

  • DüşükContent-Security-Policy yalnızca raporluyor, uygulanmıyor

    Report-only politika ihlalleri kaydeder ama hiçbir şeyi engellemez; henüz koruma sağlamaz.

    web sitesi · CWE-693

  • OrtaCSP satır içi script'lere izin veriyor

    `script-src` içindeki `'unsafe-inline'`, enjekte edilen `<script>` etiketlerinin ve event handler'ların çalışmasına izin verir — CSP'nin asıl engellemek için var olduğu şey.

    web sitesi · CWE-79

  • DüşükCSP eval'e izin veriyor

    `'unsafe-eval'`, string'lerin `eval`, `new Function` ve string timer'larla koda dönüşmesine izin verir; bu da bazı injection hatalarını script çalıştırmaya çevirir.

    web sitesi · CWE-95

  • OrtaCSP script'lerin her yerden yüklenmesine izin veriyor

    `*`, `https:`, `http:` veya `data:` içeren bir `script-src` her host'tan script'e izin verir; etiket enjekte edebilen saldırgan kendi dosyasını yükler ve politika buna izin verir.

    web sitesi · CWE-693

  • DüşükCSP eklentileri veya base URL'yi açık bırakıyor

    `object-src 'none'` olmadan eski eklenti içeriği hâlâ çalışabilir; `base-uri` olmadan enjekte edilen bir `<base>` etiketi sayfadaki her göreli script URL'sini başka yere yönlendirebilir.

    web sitesi · CWE-693

Sorular

Nonce 'unsafe-inline'ı güvenli yapar mı?
Nonce veya hash varken CSP Level 2 tarayıcıları 'unsafe-inline'ı yok sayar; onu tutmak yalnızca çok eski tarayıcılara yardım eder. Politikada nonce veya hash varsa RepoVerse 'unsafe-inline'ı raporlamaz.
CSP'yi Next.js veya React ile kullanabilir miyim?
Evet. Next.js middleware üzerinden nonce destekler ve React varsayılan olarak satır içi script olmadan render eder. Sıkı bir politikayı zorlaştıran genelde üçüncü taraf etiketlerdir.

İlgili

Güncellendi 2026-10-11