Türkçe

İçerik Güvenlik Politikası'nın (CSP) Çapraz Site Betik (XSS) saldırılarını nasıl etkili bir şekilde hafiflettiğini ve küresel bir kitle için web güvenliğini nasıl artırdığını öğrenin.

İçerik Güvenlik Politikası (CSP): XSS Önlemeye Yönelik Kapsamlı Bir Kılavuz

Günümüzün dijital ortamında, web güvenliği çok önemlidir. Çapraz Site Betik (XSS) saldırıları, web uygulamalarına yönelik yaygın ve tehlikeli bir tehdit olmaya devam etmektedir. İçerik Güvenlik Politikası (CSP), XSS güvenlik açıklarının riskini azaltmaya yardımcı olan ve ekstra bir güvenlik katmanı sağlayan güçlü bir HTTP yanıt başlığıdır. Bu kılavuz, CSP'ye, uygulamasına ve web uygulamalarınızı XSS saldırılarından korumak için en iyi uygulamalara kapsamlı bir genel bakış sunmaktadır.

Çapraz Site Betik (XSS) Nedir?

Çapraz Site Betik (XSS), kötü amaçlı betiklerin aksi takdirde iyi huylu ve güvenilir web sitelerine enjekte edildiği bir tür enjeksiyon saldırısıdır. XSS saldırıları, bir saldırganın genellikle bir tarayıcı tarafı betiği şeklinde kötü amaçlı kodu farklı bir son kullanıcıya göndermek için bir web uygulaması kullandığında meydana gelir. Bu saldırıların başarılı olmasına izin veren kusurlar oldukça yaygındır ve bir web uygulamasının, onu doğrulama veya kodlama yapmadan oluşturduğu çıktı içinde bir kullanıcıdan gelen girdiyi kullandığı her yerde meydana gelir.

Üç ana XSS saldırısı türü vardır:

XSS saldırılarının ciddi sonuçları olabilir, örneğin:

İçerik Güvenlik Politikası (CSP) Nedir?

İçerik Güvenlik Politikası (CSP), Çapraz Site Betik (XSS) ve veri enjeksiyonu saldırıları dahil olmak üzere belirli saldırı türlerini tespit etmeye ve azaltmaya yardımcı olan ek bir güvenlik katmanıdır. CSP, belirli bir sayfa için tarayıcının yüklemesine izin verilen kaynakları (örneğin, betikler, stil sayfaları, resimler, yazı tipleri, çerçeveler) kontrol etmenizi sağlayan bir HTTP yanıt başlığı kullanılarak uygulanır. Katı bir CSP tanımlayarak, web uygulamanızın saldırı yüzeyini önemli ölçüde azaltabilir ve saldırganların kötü amaçlı kod enjekte etmesini zorlaştırabilirsiniz.

CSP, tarayıcının kaynak yüklemesine izin verilen kaynakların bir beyaz listesini tanımlayarak çalışır. CSP'de açıkça izin verilmeyen bir kaynaktan yüklenen herhangi bir kaynak tarayıcı tarafından engellenir. Bu, yetkisiz betiklerin yürütülmesini önler ve XSS saldırıları riskini azaltır.

CSP Nasıl Çalışır: Direktifler ve Kaynaklar

CSP, her biri belirli bir kaynak türü için bir politika belirten bir dizi direktif kullanılarak yapılandırılır. Her direktif, bir ad ve ardından izin verilen kaynakların bir listesinden oluşur. İşte en sık kullanılan CSP direktiflerinden bazıları:

Yaygın olarak kullanılan kaynak değerleri şunlardır:

CSP Uygulama

CSP iki temel şekilde uygulanabilir:

  1. HTTP Başlığı: Tercih edilen yöntem, web sunucunuzu `Content-Security-Policy` HTTP yanıt başlığını gönderecek şekilde yapılandırmaktır. Bu, web sitenizdeki her sayfa veya kaynak için CSP'yi tanımlamanıza olanak tanır.
  2. <meta> Etiketi: CSP, HTML belgenizin <head> bölümündeki bir <meta> etiketi kullanılarak da tanımlanabilir. Ancak, bu yöntem daha az esnektir ve HTTP başlığını kullanmaya kıyasla sınırlamaları vardır. Örneğin, `frame-ancestors`, `sandbox` ve `report-uri` direktifleri HTML meta etiketlerinde kullanılamaz.

HTTP Başlığını Kullanma

HTTP başlığını kullanarak CSP uygulamak için, web sunucunuzu yanıtlarına `Content-Security-Policy` başlığını ekleyecek şekilde yapılandırmanız gerekir. Belirli yapılandırma adımları, kullandığınız web sunucusuna bağlı olarak değişecektir.

İşte yaygın web sunucuları için örnekler:

<meta> Etiketini Kullanma

<meta> etiketini kullanarak CSP uygulamak için, HTML belgenizin <head> bölümüne aşağıdaki etiketi ekleyin:

<meta http-equiv="Content-Security-Policy" content="default-src 'self'; script-src 'self' https://example.com; style-src 'self' https://example.com; img-src 'self' data:;">

Önemli Hususlar:

CSP Örnekleri

İşte açıklamalarıyla birlikte çeşitli CSP örnekleri:

  1. Temel CSP:
  2. Content-Security-Policy: default-src 'self';

    Bu politika, yalnızca aynı kökenden kaynaklara izin verir.

  3. Belirli Bir Etki Alanından Betiklere İzin Verme:
  4. Content-Security-Policy: default-src 'self'; script-src 'self' https://example.com;

    Bu politika, aynı kökenden kaynaklara ve `https://example.com` adresinden betiklere izin verir.

  5. Bir CDN'den Stilleri İzin Verme:
  6. Content-Security-Policy: default-src 'self'; style-src 'self' https://cdn.example.com;

    Bu politika, aynı kökenden kaynaklara ve `https://cdn.example.com` adresinden stillere izin verir.

  7. Herhangi Bir Kaynaktan Görüntülere İzin Verme:
  8. Content-Security-Policy: default-src 'self'; img-src *;

    Bu politika, aynı kökenden kaynaklara ve herhangi bir kaynaktan görüntülere izin verir (üretim için önerilmez).

  9. CSP İhlallerini Raporlama:
  10. Content-Security-Policy: default-src 'self'; report-uri /csp-report-endpoint;

    Bu politika, aynı kökenden kaynaklara izin verir ve ihlal raporlarını `/csp-report-endpoint` adresine gönderir. `report-uri` yerine `report-to` kullanılması önerilir.

  11. Uyumluluk için `report-to` ve `report-uri`'yi birlikte kullanma:
  12. Content-Security-Policy: default-src 'self'; report-uri /csp-report-endpoint; report-to csp-endpoint;
    Content-Security-Policy-Report-Only: default-src 'self'; report-uri /csp-report-endpoint; report-to csp-endpoint;
    Report-To: {"group":"csp-endpoint","max_age":10886400,"endpoints":[{"url":"/csp-report-endpoint"}]}

    Bu örnek, hem bir `report-uri` (eski tarayıcılar için) hem de bir `report-to` uç noktasının nasıl ayarlanacağını ve `Report-To` başlığının kendisinin nasıl yapılandırılacağını gösterir. Sunucunuzun `Report-To` başlığını doğru bir şekilde işlediğinden, `group`, `max_age` ve `endpoints` değerlerini doğru ayarladığınızdan emin olun.

  13. Satır İçi Betikler İçin Nonce'lar Kullanma:
  14. Content-Security-Policy: default-src 'self'; script-src 'self' 'nonce-rAnd0mN0nc3Str1nG';

    Bu politika, aynı kökenden kaynaklara ve eşleşen nonce özniteliğine sahip satır içi betiklere izin verir.

    <script nonce="rAnd0mN0nc3Str1nG">
      // Your inline script code here
    </script>

Yalnızca Raporlama Modunda CSP

CSP iki modda uygulanabilir:

Yalnızca Raporlama modu, CSP'nizi uygulamadan önce test etmek ve iyileştirmek için kullanışlıdır. Yalnızca Raporlama modunu etkinleştirmek için, `Content-Security-Policy` başlığı yerine `Content-Security-Policy-Report-Only` HTTP başlığını kullanın.

Örnek:

Content-Security-Policy-Report-Only: default-src 'self'; report-uri /csp-report-endpoint;

Bu yapılandırma, herhangi bir kaynağı engellemeden `/csp-report-endpoint` adresine rapor gönderecektir.

CSP Uygulamak İçin En İyi Uygulamalar

İşte CSP'yi etkili bir şekilde uygulamak için bazı en iyi uygulamalar:

  1. Katı Bir Politikayla Başlayın: Yalnızca aynı kökenden kaynaklara izin veren kısıtlayıcı bir politikayla başlayın ve gerektiğinde kademeli olarak gevşetin.
  2. Satır İçi Betikler ve Stiller İçin Nonce'lar veya Hash'ler Kullanın: `'unsafe-inline'` kullanmaktan kaçının ve belirli satır içi betiklere ve stillere izin vermek için nonce'lar veya hash'ler kullanın.
  3. `'unsafe-eval'`'den Kaçının: Mümkünse, güvenlik riskleri oluşturabileceğinden `'unsafe-eval'` kullanmaktan kaçının. Dinamik kod yürütme için alternatif yaklaşımları göz önünde bulundurun.
  4. HTTPS Kullanın: Ortadaki adam saldırılarını önlemek için tüm kaynakların HTTPS üzerinden yüklendiğinden emin olun. Güvenli olmayan istekleri otomatik olarak yükseltmek için `upgrade-insecure-requests` direktifini kullanın.
  5. CSP İhlallerini İzleyin: CSP ihlallerini izlemek ve potansiyel güvenlik sorunlarını belirlemek için bir raporlama uç noktası ayarlayın.
  6. CSP'nizi İyice Test Edin: Beklendiği gibi çalıştığından emin olmak için CSP'nizi farklı tarayıcılarda ve ortamlarda test edin.
  7. Yineleyin ve İyileştirin: CSP uygulaması yinelemeli bir işlemdir. Uygulamanız geliştikçe CSP'nizi sürekli olarak izleyin ve iyileştirin.
  8. `strict-dynamic` Direktifini Göz Önünde Bulundurun: Güvenilir betikler tarafından yüklenen betiklere güveni yayarak CSP'nizin karmaşıklığını azaltmak için `strict-dynamic` kullanın.

CSP Araçları

Çeşitli araçlar, CSP oluşturmanıza, test etmenize ve izlemenize yardımcı olabilir:

CSP ve Çerçeveler/Kitaplıklar

Çerçeveleri ve kitaplıkları kullanırken, uyumluluğu sağlamak ve güvenlik sorunlarını önlemek için CSP'yi doğru şekilde yapılandırmak önemlidir. İşte bazı hususlar:

CSP ve CDN'ler (İçerik Dağıtım Ağları)

CDN'ler, JavaScript dosyaları, CSS stil sayfaları ve resimler gibi statik varlıkları barındırmak için yaygın olarak kullanılır. CSP'nizde CDN'lerden kaynaklara izin vermek için, CDN etki alanlarını açıkça beyaz listeye almanız gerekir.

Örnek:

Content-Security-Policy: default-src 'self'; script-src 'self' https://cdn.jsdelivr.net; style-src 'self' https://cdnjs.cloudflare.com;

Bu politika, jsDelivr'den betiklere ve Cloudflare'ın cdnjs'sinden stillere izin verir.

Kaçınılması Gereken Yaygın CSP Hataları

İşte kaçınılması gereken bazı yaygın CSP hataları:

Gelişmiş CSP Kavramları

Temel bilgilerin ötesinde, çeşitli gelişmiş CSP kavramları web güvenliğinizi daha da artırabilir:

CSP'nin Geleceği

CSP, yeni güvenlik zorluklarını ele almak için sürekli olarak gelişmektedir. Gelecekteki gelişmeler şunları içerebilir:

Sonuç

İçerik Güvenlik Politikası (CSP), XSS saldırılarını azaltmak ve web güvenliğini artırmak için güçlü bir araçtır. Katı bir CSP tanımlayarak, web uygulamanızın saldırı yüzeyini önemli ölçüde azaltabilir ve kullanıcılarınızı kötü amaçlı koddan koruyabilirsiniz. CSP'yi etkili bir şekilde uygulamak, dikkatli planlama, kapsamlı test ve sürekli izleme gerektirir. Bu kılavuzda özetlenen en iyi uygulamaları izleyerek, web uygulamalarınızın güvenlik duruşunu iyileştirmek ve küresel dijital ekosistemde çevrimiçi varlığınızı korumak için CSP'den yararlanabilirsiniz.

Gelişen güvenlik tehditlerine uyum sağlamak ve web uygulamalarınızın korunmaya devam etmesini sağlamak için CSP'nizi düzenli olarak gözden geçirmeyi ve güncellemeyi unutmayın.

İçerik Güvenlik Politikası (CSP): XSS Önlemeye Yönelik Kapsamlı Bir Kılavuz | MLOG