CSP Üreteci

Yönergeleri ve kaynakları işaretleyin; bu sayfa yanıt başlığınız veya <meta> etiketiniz için doğru tek satırlık bir Content-Security-Policy oluşturur — ayrıca önemli notlar: hangi yönergelerin asla default-src'ye geri dönmediği, bir karma veya nonce'un unsafe-inline'ı sessizce ne zaman geçersiz kıldığı ve strict-dynamic'in neyi kapattığı. Yerleşik SHA-256/384/512 karma üreteci satır içi betikleri ve stilleri 'sha256-…' kaynaklarına dönüştürür. Her şey tarayıcınızda çalışır; hiçbir şey yüklenmez.
İşaretlenmemiş yönergeler politikada yer almaz; hiçbir kaynak seçilmemiş bir işaret yok sayılır. 'none', satırındaki diğer kutuları iptal eder. ek kaynaklar kutusu virgülle ayrılmış bir liste alır: ana bilgisayar adları (cdn.example.com), şemalar (https:), karmalar ve nonce'lar, tırnaklı ya da tırnaksız.
yönerge 'self''none''unsafe-inline' 'unsafe-eval''strict-dynamic' data:blob: ek kaynaklar
Bu dört yönerge default-src'a geri dönmez: bunları dışarıda bırakmak “kısıtlama yok” anlamına gelir, bu yüzden eksiksiz bir politika bunları açıkça ayarlar.
yönerge'self''none'ek kaynaklar

betik nonce'u
report-uri
report-to
Henüz hiçbir şey oluşturulmadı. Bazı kaynakları işaretleyin ve Politikayı Oluşturun düğmesine basın ya da OWASP temel örneğini yükleyin.
<script> ile </script> arasındaki (ya da stil bloğundaki) tam içeriği yapıştırın — bayt bayt, baştaki veya sondaki satır sonu olmadan — ve bir algoritma seçin. Sonuç, CSP 3'ün beklediği 'sha256-…' kaynağıdır.
Karma çıktısı burada görünür.
Mümkün olduğunda meta etiketi yerine başlık olarak dağıtın. Yanıt başlığı tam CSP'dir: frame-ancestors, report-uri ve report-to yalnızca orada çalışır ve bir başlık HTML'nin ilk baytı ayrıştırılmadan önce uygulanır. Meta etiketi, sunucu yapılandırması olmayan statik dosyalar için yedektir. Sitenizin gerçekten gönderdiği başlıkları güvenlik başlıkları denetleyicisinde kontrol edin ve ham yanıt bloklarını HTTP başlık ayrıştırıcısında parçalara ayırın.
Öz test
Üreteci sabit durumlara karşı yeniden çalıştırır: kaynak sıralaması, 'none' karşılıklı dışlaması, OWASP temel dizgisi, nonce ve karma tırnaklaması, base-uri / form-action / frame-ancestors için geri dönüş olmadığına dair notlar, nonce veya karma tarafından geçersiz kılınan unsafe-inline, strict-dynamic notları, Report-Only başlık adları, meta etiketi dışlamaları, bağımsız hesaplanmış SHA vektörlerine karşı karma üreteci ve olumsuz yollar. Hiçbir şey bir yere gönderilmez.
İçerik Güvenlik Politikası nedir?
Tek cümlede: CSP, sunucunun bir sayfayla birlikte gönderdiği bir beyaz listedir; tarayıcıya betiklerin, stillerin, resimlerin ve bağlantıların tam olarak nereden gelebileceğini söyler — bu yüzden bir saldırgan HTML enjekte etse bile, enjekte edilen betik yüklenemez, çünkü kaynağı listede yoktur.
Üç yönerge grubu
GrupÖrneklerDenetimlerdefault-src'ye geri döner mi?
Getirme yönergeleriscript-src, style-src, img-src, connect-src, font-src, object-src, frame-src, worker-src, media-src, manifest-srcher içerik türünün nereden yüklenebileceğievet — işaretlenmemiş bir yönerge default-src'yi devralır
Belge yönergeleribase-uri, form-action, frame-ancestors, sandboxsayfanın kendisinin neler yapabileceği (gömülebilir, formları gönderebilir, göreli URL'leri çözümleyebilir)hayır — her biri açıkça ayarlanmalıdır
Raporlama ve çeşitlireport-uri, report-to, upgrade-insecure-requestsihlal raporlarının nereye gittiği ve eski URL yükseltmesihayır (bunlar getirme yönergeleri değildir)
En keskin kenarlar, her biri bir paragrafta

'unsafe-inline' ile karmalar ve nonce'lar. Bir yönerge bir nonce veya herhangi bir karma kaynağı içeriyorsa, CSP 3 'unsafe-inline''ın yok sayıldığını söyler — yalnızca çok eski tarayıcılar için orada kalır. Bu yüzden “bir nonce ekledik ve güvenlik için unsafe-inline'ı tuttuk” demek, aslında modern tarayıcıların nonce'u zorladığı anlamına gelir. Üreteç bu birleşimi işaretler; böylece bu bir kaza değil, bir karar olur.

strict-dynamic izin listenizi devre dışı bırakır. script-src içinde strict-dynamic ile, ana bilgisayar kaynakları, şemalar, 'self', 'unsafe-inline' ve data: betikler için yok sayılır; yalnızca nonce'lar ve karmalar önemlidir ve onların yüklediği betikler başka betikler yükleyebilir. Yükleyici betikleri çalıştırmanın modern yoludur — ama script-src listesinin geri kalanını süse dönüştürür.

Meta etiketleri ikinci sınıftır. frame-ancestors, report-uri ve report-to, <meta http-equiv> içinde yok sayılır. Üreteç, politikanızın hangi bölümlerinin sessizce uygulanmayacağını gösterir.

Yaygın hatalar
  • default-src * ile başlayıp uzun bir istisna listesi eklemek. Tersini yapın: sıkı bir default-src 'self' ile başlayın, sonra yalnızca genişletilmesi gereken yönergeleri genişletin. Dar politikalar test sırasında yüksek sesle başarısız olur; geniş politikalar sonsuza kadar sessizce başarısız olur.
  • script-src 'unsafe-inline' 'unsafe-eval' gönderip işi bitmiş saymak. Bu politika, bir XSS saldırısının yapmak istediği neredeyse hiçbir şeyi engellemez. Betiklerinize nonce veya karma uygulayın, strict-dynamic ekleyin ve gerilemeleri yakalamak için üretimde report-only çalıştırın.
  • default-src'un her şeyi kapsamadığını unutmak. base-uri, form-action, frame-ancestors ve sandbox'ın geri dönüşü yoktur — gerçek dünya CSP dağıtımlarında en çok anılan boşluk.
  • Önce zorlama modunda test etmek. Bir hafta boyunca bir toplayıcıyla Report-Only modunda çalıştırın, raporları okuyun, sonra zorlamaya geçin. Ödemeyi bozan bir politika, politikasızlıktan daha kötüdür.
  • Boşlukları farklı karma etmek. Bir karma, satır içi bloğun tam baytlarını kapsar; sondaki satır sonlarını kırpan “yardımcı” bir derleme adımı her karmayı değiştirir. Karmaları kaynaktan değil, gönderilen şeyden üretin.
SSS

Her yönergeyi listelesem de default-src'a ihtiyacım var mı? Hayır, ama bir taban olarak tutmak iyi bir alışkanlıktır: gelecekteki tarayıcılardaki yeni getirme yönergeleri “izinli” yerine sizin tabanınıza döner.

upgrade-insecure-requests gerçekte ne yapar? Tarayıcıya, sayfanın yükleyeceği her http:// URL'sini — resimler, stiller, getirmeler — istek yapılmadan önce https://'e yeniden yazmasını söyler. Bir geçiş aracıdır; son durum hiçbir http:// URL'si içermeyen sayfalardır.

Nonce mı karma mı? Sunucu yanıtını kontrol ettiğinizde nonce (her yanıt için rastgele bir değer; hem başlıkta hem her betik etiketinde). HTML statik veya önbelleğe alınmışsa karma. Asla sabit bir nonce kullanmayın — değişmeyen bir nonce, ekstra adımlarla birlikte yalnızca unsafe-inline'dır.

Politikanız teslim ediliyor ama ihlaller gelmiyor, neden? Report-Only (yalnızca rapor) modunda olup olmadığınızı, report-uri'nin POST kabul eden bir toplayıcıya işaret edip etmediğini ve modern report-to yönergesinin gerektirdiği Reporting-Endpoints / Report-To mekanizmasını da ayarlayıp ayarlamadığınızı denetleyin.

Bir CSP diğer korumaların yerini alır mı? Hayır. Bu bir katmandır: çıktınızı kaçışlandırmaya devam edin, çerezleri HttpOnly ve Secure arkasında tutun, HSTS'yi koruyun. Bu sitedeki güvenlik başlıkları denetleyicisi tüm kümeyi değerlendirir.