Content Security Policy doğrudan katı biçimde etkinleştirilirse ödeme, analiz, font veya JavaScript bileşenleri beklenmedik şekilde durabilir. Content-Security-Policy-Report-Only başlığı politikayı uygulatmadan ihlalleri gözlemlemeye imkân verir. Böylece gerçek kaynak envanteri çıkarılıp güvenli politika aşamalı kurulabilir.
İlk politikayı dar bir başlangıçla gönderin
Content-Security-Policy-Report-Only: default-src 'self'; script-src 'self'; style-src 'self'; img-src 'self' data:; object-src 'none'; base-uri 'self'; report-to csp-endpoint
Report-only başlığı kaynakları engellemez; tarayıcı ihlalleri izler. Bu başlık meta etiketiyle kullanılamaz, HTTP yanıt başlığı olarak gönderilmelidir.
Rapor hedefini tanımlayın
Reporting-Endpoints: csp-endpoint="https://reports.example.com/csp"
Rapor uç noktası internete açık veri kabul eder. Oran sınırlama, istek boyutu sınırı, günlük rotasyonu ve kişisel veri değerlendirmesi olmadan doğrudan uygulama veritabanına yazmayın.
Tarayıcı konsoluyla sunucu raporunu birlikte inceleyin
Geliştirici araçlarında engellenecek kaynak, ihlal edilen direktif ve belge adresi görülür. Sunucu raporlarında aynı üçüncü taraf alanın tekrar etmesi, politikanın o kaynağı tanımadığını gösterir. Tarayıcı eklentileri ve kullanıcı kaynaklı enjeksiyonlar gürültü oluşturabileceği için tek rapora dayanarak allowlist genişletmeyin.
Kaynak alanını eklemeden önce nedenini doğrulayın
Bir alanın meşru görünmesi güvenli olduğu anlamına gelmez. Uygulamanın gerçekten kullandığı servis, yüklenen dosya türü ve alt alan kapsamı belirlenmelidir. Geniş https: veya * izinleri CSP'nin değerini ciddi biçimde azaltır.
Inline script için unsafe-inline yerine nonce kullanın
Content-Security-Policy-Report-Only: script-src 'self' 'nonce-RANDOM_VALUE'
<script nonce="RANDOM_VALUE">startApp();</script>
Nonce her yanıt için kriptografik olarak rastgele üretilmeli ve yalnızca o yanıttaki güvenilir scriptlerde kullanılmalıdır. Sabit nonce koruma sağlamaz.
Uygulamaya geçişi bölüm bölüm yapın
Önce object-src ve base-uri gibi düşük uyumluluk riskli direktifleri zorunlu hâle getirin. Ardından script, bağlantı, font, frame ve görsel kaynaklarını gerçek raporlara göre sıkılaştırın. Report-only ve enforced başlıkları geçiş sırasında birlikte kullanılabilir.
Başvuru: W3C Content Security Policy Level 3.