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
Content-Security-Policy: default-src * 'unsafe-inline' 'unsafe-eval'Content-Security-Policy: default-src 'self'; script-src 'self' 'nonce-{random}' 'strict-dynamic'; object-src 'none'; base-uri 'self'; frame-ancestors 'self'; upgrade-insecure-requestsCSP'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
- Siteler arası betik (XSS): nasıl çalışır, nasıl durdurulurYansıtılan, kalıcı ve DOM tabanlı XSS (CWE-79), zafiyetli ve düzeltilmiş kodla; ayrıca hasarı sınırlayan şablon, CSP ve cookie ayarları.
- Clickjacking: görünmez bir frame üzerinden çalınan tıklamalarClickjacking'in (CWE-1021) tıklamaları çalmak için sayfanı görünmez bir frame'de nasıl sakladığı ve bunu önleyen iki header — CSP frame-ancestors ve X-Frame-Options.
- Her eksik için çözümüyle güvenlik header kontrolüSitenin HTTP güvenlik header'larını kontrol et — Content-Security-Policy, HSTS, X-Frame-Options, X-Content-Type-Options, Referrer-Policy — her eksik için eklenecek satırla.
Güncellendi 2026-10-11