- Konu sahibi
- #1
CSP report-only modu, Content Security Policy kurallarını henüz engelleme yapmadan denemenizi sağlar. Tarayıcı, politikanın ihlal edildiği istekleri ve çalıştırılmak istenen kodları raporlar; ancak bu istekleri veya kodları durdurmaz. Böylece denenen politika kaynakları engellemeden hangi kaynakların gerçek CSP politikanızla çakışacağını görüp düzeltmeleri uygulayabilirsiniz.
Sunucu, tek başına veya mevcut etkin politikaya ek olarak
Örneğin aşağıdaki başlık, sitenin kendi kaynaklarını temel alır; ayrıca belirli bir içerik dağıtım alanından betik yüklenmesine izin verir:
Bu başlıkta
Rapor hedefi yapılandırılmamışsa ihlalleri en azından tarayıcının geliştirici araçlarındaki Console ve Network bölümlerinden inceleyebilirsiniz. Raporların gelmemesi, politikanın ihlal olmadığı anlamına gelmez; rapor uç noktasının kabul biçimi, tarayıcı desteği ve uygulama günlükleri ayrıca kontrol edilmelidir.
Aynı yönergeler iki farklı başlıkla sunulabilir. Karar verirken asıl fark, ihlal anında içeriğin durdurulup durdurulmadığıdır.
Mevcut etkin CSP varsa report-only onu gevşetmez; iki politika bağımsız değerlendirilir. Bu nedenle report-only, güvenlik korumasının yerine geçen bir mod değil, politika doğrulama aşamasıdır. Tek başına XSS veya kötü amaçlı kaynak yükleme riskini engellemez.
Örnekte sayfa,
Report-only koruma sağlar sanmak: Bu mod ihlali bildirebilir fakat içeriği engellemez. Koruma beklentisi varsa etkin CSP gerekir.
Yalnızca ana sayfayı test etmek: Yönetim paneli, kullanıcı hesabı ve ödeme gibi farklı sayfalar farklı kaynaklar kullanabilir.
Her uyarıyı izin listesine eklemek: Böyle yapmak rapor sayısını azaltır ancak politikanın güvenlik değerini düşürebilir. Önce gereksiz kaynağı kaldırmayı veya uygulamayı değiştirmeyi değerlendirin.
Rapor uç noktasını loglamadan bırakmak: Tarayıcı uyarıları geçici olabilir. Raporları güvenilmeyen dış girdi olarak alın; boyut/hız sınırı uygulayın, hassas URL ve değerleri maskeleyin. Rapor içindeki adresi sunucudan otomatik çağırmayın. Gruplayan bir kayıt mekanizması olmadan geçiş kararını yalnızca tek bir tarayıcı oturumuna dayandırmayın.
Nasıl çalışır?
Sunucu, tek başına veya mevcut etkin politikaya ek olarak
Content-Security-Policy-Report-Only başlığı gönderir. Tarayıcı bu başlıktaki kuralları değerlendirir, ihlal gördüğünde geliştirici konsoluna uyarı yazar ve yapılandırılmışsa rapor adresine bildirim gönderir.Örneğin aşağıdaki başlık, sitenin kendi kaynaklarını temel alır; ayrıca belirli bir içerik dağıtım alanından betik yüklenmesine izin verir:
Kod:
Reporting-Endpoints: csp="https://example.com/csp-report"
Content-Security-Policy-Report-Only: default-src 'self'; script-src 'self' https://cdn.example.com; style-src 'self' 'unsafe-inline'; img-src 'self' data:; report-to csp; report-uri /csp-report
Bu başlıkta
script-src 'self', varsayılan olarak yalnızca aynı kaynaktaki betiklere izin verilmesini öngörür. https://cdn.example.com ayrıca izin verilen betik kaynağıdır. report-to csp, Reporting-Endpoints başlığında tanımlanan hedefi seçer. Eski ve kullanımdan kaldırılan report-uri /csp-report ise tarayıcının ihlal raporunu göndereceği sunucu yolunu belirtir. Bu yolun POST isteklerini kabul eden bir uygulama uç noktası olması gerekir; yalnızca statik bir dosya yolu olması yeterli değildir. İkisi birlikte tarayıcı uyumluluğu için gösterilmiştir; modern rapor gövdesiyle eski report-uri biçimi aynı değildir. example.com adresini size ait HTTPS rapor uç noktasıyla değiştirin.Rapor hedefi yapılandırılmamışsa ihlalleri en azından tarayıcının geliştirici araçlarındaki Console ve Network bölümlerinden inceleyebilirsiniz. Raporların gelmemesi, politikanın ihlal olmadığı anlamına gelmez; rapor uç noktasının kabul biçimi, tarayıcı desteği ve uygulama günlükleri ayrıca kontrol edilmelidir.
Report-only ile etkin CSP arasındaki fark
Aynı yönergeler iki farklı başlıkla sunulabilir. Karar verirken asıl fark, ihlal anında içeriğin durdurulup durdurulmadığıdır.
| Konu | CSP report-only | Etkin CSP |
|---|---|---|
| İhlal edilen istek | Genellikle yüklenmeye devam eder | Politikaya göre engellenir |
| Ana kullanım | Keşif, test ve geçiş hazırlığı | Gerçek koruma ve kısıtlama |
| Siteyi bozma riski | Düşüktür; yine de raporlar incelenmelidir | Yanlış kural varsa doğrudan etkileyebilir |
Mevcut etkin CSP varsa report-only onu gevşetmez; iki politika bağımsız değerlendirilir. Bu nedenle report-only, güvenlik korumasının yerine geçen bir mod değil, politika doğrulama aşamasıdır. Tek başına XSS veya kötü amaçlı kaynak yükleme riskini engellemez.
Uygulama ve değerlendirme adımları
- Önce yalnızca HTTPS üzerinden sunulan gerçek sayfalar için report-only başlığını ekleyin. Başlığın HTML içine meta etiketi olarak değil, HTTP yanıt başlığı olarak gönderildiğini doğrulayın.
- Sitenin giriş, ödeme, yönetim, arama ve form içeren sayfalarını dolaşın. Tek bir ana sayfayı test etmek, yalnızca o sayfada kullanılan kaynakları gösterir.
- Console uyarılarını ve rapor uç noktasına gelen bildirimleri kaynak adresi, yönerge ve sayfa bazında gruplayın. Aynı ihlalin çok sayıda tekrarını tek sorun olarak değerlendirin.
- Her kayıt için kaynağın gerçekten gerekli olup olmadığını belirleyin. Gereksiz üçüncü tarafı kaldırın; gerekli kaynağı politika içine ekleyin. Satır içi betik gerekiyorsa mümkün olduğunda nonce veya hash tabanlı yaklaşımı değerlendirin; geniş izinler eklemek kısa vadede kolay olsa da politikayı zayıflatır.
- Başlık sözdizimini ve tüm kritik akışları yeniden test edin. Beklenen sonuç, sayfaların çalışması ve kalan ihlallerin bilinen, kabul edilmiş kaynaklarla sınırlanmasıdır.
- Raporlar kararlı hale geldikten sonra etkin
Content-Security-Policybaşlığına geçişi kontrollü yapın. Geçişten sonra beklenmeyen bir işlev bozulursa ilgili yönergeyi rastgele genişletmek yerine hangi kaynağın engellendiğini inceleyip en dar düzeltmeyi uygulayın.
Somut örneğin yorumu
Örnekte sayfa,
https://cdn.example.com üzerinden betik çağırıyor; ancak aynı sayfa başka bir CDN, satır içi betik veya eval kullanıyorsa report-only raporu oluşabilir. Sayfa report-only aşamasında açılmaya devam eder ve bu durum politikanın doğru olduğu anlamına gelmez. Raporu gördüğünüzde önce kaynağın uygulama için gerekli olup olmadığını, ardından daha dar bir izinle ifade edilip edilemeyeceğini kararlaştırın.Sık yapılan hatalar
Report-only koruma sağlar sanmak: Bu mod ihlali bildirebilir fakat içeriği engellemez. Koruma beklentisi varsa etkin CSP gerekir.
Yalnızca ana sayfayı test etmek: Yönetim paneli, kullanıcı hesabı ve ödeme gibi farklı sayfalar farklı kaynaklar kullanabilir.
Her uyarıyı izin listesine eklemek: Böyle yapmak rapor sayısını azaltır ancak politikanın güvenlik değerini düşürebilir. Önce gereksiz kaynağı kaldırmayı veya uygulamayı değiştirmeyi değerlendirin.
Rapor uç noktasını loglamadan bırakmak: Tarayıcı uyarıları geçici olabilir. Raporları güvenilmeyen dış girdi olarak alın; boyut/hız sınırı uygulayın, hassas URL ve değerleri maskeleyin. Rapor içindeki adresi sunucudan otomatik çağırmayın. Gruplayan bir kayıt mekanizması olmadan geçiş kararını yalnızca tek bir tarayıcı oturumuna dayandırmayın.