Mehmet

WFN Üye
Konular
1,851
Mesajlar
1,852
Çözüm
0
Ticaret Puanı
0
Üyelik
1 Ay 6 Gün
Konum
YurtDışı
Web Sitesi
Var
Alanı
Google Adsense
1/1
Konu sahibi
Content Security Policy (CSP), tarayıcıya bir web sayfasının hangi kaynaklardan JavaScript, stil, görsel, yazı tipi, bağlantı veya çerçeve yükleyebileceğini bildiren bir güvenlik politikasıdır. Genellikle HTTP yanıtındaki Content-Security-Policy başlığıyla gönderilir. Amaç, bir XSS açığı kullanılarak sayfaya eklenen yetkisiz kodun çalışmasını ve verilerin istenmeyen adreslere gönderilmesini zorlaştırmaktır. CSP tek başına açığı kapatmaz; hatalı giriş doğrulamasının, güncel olmayan yazılımın veya güvensiz eklentilerin yerine geçmez.

CSP nasıl çalışır?​


Politika, direktiflerden oluşur. Her direktif belirli bir kaynak türünü ve izin verilen adresleri belirtir. Örneğin script-src 'self', yalnızca aynı origin üzerinden gelen betiklere izin verir. 'self' mevcut sitenin origin'ini ifade eder; alt alan adları veya üçüncü taraf servisler otomatik olarak buna dahil olmaz.

default-src, ayrı kuralı olmayan fetch direktifleri için geri dönüş kaynağıdır; frame-ancestors, form-action ve base-uri gibi bütün CSP direktiflerinin varsayılanı değildir. Daha özel direktifler bu varsayılanı geçersiz kılar. Sık kullanılan bazı direktifler şunlardır:

DirektifKontrol ettiği kaynakÖrnek karar
script-srcJavaScript dosyaları ve betiklerYalnız site içi betiklere izin ver
style-srcCSS dosyaları ve stillerHarici stil sağlayıcısını açıkça tanımla
img-srcGörsellerSite içi ve gereken görsel CDN'i
connect-srcFetch, XMLHttpRequest ve WebSocket bağlantılarıAPI origin'lerini sınırla
frame-ancestorsSayfanın başka sitelerde çerçevelenmesiÇerçevelemeyi kapat veya izin verilen siteleri belirt

Bir kaynağı yalnızca gerçekten kullanmanız gereken yerde izinli listeye ekleyin. script-src *, script-src 'unsafe-inline' veya script-src 'unsafe-eval' gibi geniş izinler politikanın koruma gücünü önemli ölçüde azaltabilir.

Basit ve uygulanabilir bir örnek​


Aşağıdaki politika, aynı origin'deki kaynakları temel alır; nesne eklentilerini kapatır, form gönderimini siteyle sınırlar ve sayfanın başka sitelerde çerçevelenmesini engeller:

Kod:
Content-Security-Policy: default-src 'self'; script-src 'self' 'nonce-ORNEK_RASTGELE_DEGER'; style-src 'self'; img-src 'self' data:; font-src 'self'; connect-src 'self'; object-src 'none'; base-uri 'self'; form-action 'self'; frame-ancestors 'none'

ORNEK_RASTGELE_DEGER yayımlanacak sabit değer değildir. Nonce kullanılıyorsa her HTML yanıtında kriptografik olarak rastgele yeni bir değer üretilmeli ve yalnız o yanıtta izin verilen betiğin nonce niteliğiyle aynı değer kullanılmalıdır:

Kod:
<script nonce="ORNEK_RASTGELE_DEGER">
  // Uygulamanın izin verdiği kısa başlatma kodu
</script>

Bu örneği uygulamak için şu sırayı izleyin:

  1. Sitenin gerçekten kullandığı betik, stil, görsel, yazı tipi, API ve çerçeve origin'lerini listeleyin. Kullanılmayan üçüncü tarafları listeye eklemeyin.
  2. Politikayı önce Content-Security-Policy-Report-Only başlığıyla gönderin. Bu kip kendi politikasını uygulayıp kaynakları engellemez; sunucuya rapor toplamak için ayrıca raporlama hedefi yapılandırılır; böylece mevcut işlevleri yanlışlıkla bozup bozmadığınızı görebilirsiniz.
  3. Tarayıcı geliştirici araçlarındaki Console bölümünü ve uygulamanızın topladığı CSP ihlal raporlarını inceleyin. Engellenen kaynağın gerçekten gerekli olup olmadığını değerlendirin.
  4. Gerekli bir kaynak varsa yalnızca gerçek origin'i ilgili direktife ekleyin. Gereksiz genişletme yapmak yerine hatalı kodu kaldırmayı veya aynı kaynağın daha güvenli bir sürümünü kullanmayı tercih edin.
  5. Politika beklenen kaynakları kapsadığında başlığı Content-Security-Policy olarak etkinleştirin ve normal sayfa akışını tekrar test edin.

Başarı, sitenin gerekli işlevlerinin çalışması ve Console'da beklenmeyen CSP ihlallerinin kalmamasıdır. Bir betik engelleniyorsa bu doğrudan saldırı anlamına gelmez; eksik bir izin, yanlış origin, inline kod veya uygulamanın dış servise yaptığı meşru bir istek olabilir. Buna karşılık tanımadığınız bir alan adı görülüyorsa onu otomatik olarak izin listesine almak yerine kodun ve isteğin kaynağını araştırın.

Sık yapılan hatalar​


CSP'yi yalnızca meta etiketiyle uygulamak: HTTP yanıt başlığı tercih edilmelidir. Meta yöntemi bazı yetenekleri ve yanıtın tamamını kapsamaz; güvenlik politikasını sunucu veya uygulama yanıtında üretmek daha tutarlıdır.

Her şeyi serbest bırakmak: default-src * veya sürekli 'unsafe-inline' eklemek, raporları susturabilir fakat saldırı yüzeyini genişletir. Sorunun kaynağını düzeltmek daha doğru yaklaşımdır.

Nonce değerini sabit kullanmak: Nonce, sayfalar veya yanıtlar arasında değişmeyen bir parola değildir. Sabit değer, izinsiz betiklerin aynı değeri kullanabilmesine yol açabilir.

CSP'yi XSS düzeltmesi sanmak: Kullanıcı girdisini güvenli biçimde kaçışlamak, şablonları doğru kullanmak, bağımlılıkları güncellemek ve yetkilendirmeyi sunucu tarafında yapmak yine zorunludur. CSP, bu kontrollerin yanında ek bir savunma katmanıdır.

Sık sorulan sorular​

İki CSP başlığı gönderirsem daha geniş olan mı geçerli olur?​

Birden fazla etkin politika birlikte uygulanır; bir başlıktaki geniş izin başka başlığın yasağını kaldırmaz. Uygulama, web sunucusu ve CDN aynı anda CSP ekliyorsa hepsini inceleyin. Sorunu çözmek için yalnız bir katmana izin eklemek yeterli olmayabilir.

default-src none, çerçevelemeyi de otomatik engeller mi?​

Hayır. frame-ancestors için default-src geri dönüşü yoktur; gereken çerçeveleme kararını açıkça yazın. form-action ve base-uri gibi direktifleri de kendi işlevlerine göre değerlendirin. Bu ayrım, kaynak yüklemeyi sınırlamanın bütün tarayıcı davranışlarını kapsamadığını gösterir.
 

Sende şimdi bize katılmak ister misin?

Kayıt ol

Bize katılım kolay ve ücretsizdir!

Konuyu görüntüleyenler

Bu konuyu şu anda görüntüleyen üye bulunmuyor.