Defaults.Exposed

Defaults.ExposedDüzeltmeler › İçerik Güvenliği Politikası (CSP)

İçerik Güvenliği Politikası (CSP) nasıl düzeltilir

İçerik Güvenliği Politikası, web sitenizin her ziyaretçinin tarayıcısına verdiği, tam olarak hangi kodun çalışmasına izin verildiğini söyleyen güvenlik kuralıdır. Bu olmadan sayfaya kötü niyetli herhangi bir şey bulaştığında — yorum kutusu, hacklenmiş eklenti veya üçüncü taraf komut dosyası aracılığıyla — tarayıcı asma kilit hâlâ açıkken müşterilerinizin kart numaralarını ve şifrelerini yazarken sessizce toplayan kod dahil her şeyi serbestçe çalıştırır.

İşletmeniz için sonuç: Siteniz kurcalanırsa kötü niyetli kod, her şey tamamen normal görünürken müşterilerin ödeme kartı ve giriş bilgilerini kendi ödeme kasanızdan doğrudan okuyabilir — bu durum, geri ödeme talepleri, dolandırıcılık şikâyetleri, bildirilebilir veri ihlali ve büyük müşterilerin güvenlik ekiplerinin anlaşmayı durdurmak veya iptal etmek için kullandığı kontrol başarısızlığıyla sonuçlanır.

Bu size ne mal olabilir

Neden önemlidir. Asma kilit sitenize bağlantının özel olduğunu kanıtlar; ama içinde hangi kodun çalıştığını kontrol etmek için hiçbir şey yapmaz. İçerik Güvenliği Politikası tam bunu yapan güvencedir — tarayıcılara güvenmediğiniz bir kaynaktan gelen her komut dosyasını yoksaymasını söyler; böylece tek kurcalanmış alan, reklam veya eklenti müşterilerin parasını ve verilerini çalmak için araca dönüşemez. Puan kartınızda puanlanan bir kontroldür, gerçek puanlar taşır ve profesyonel güvenlik değerlendirmesinin aradığı ilk şeylerden biridir.

Sade dille nedir

Biri web sitenizi ziyaret ettiğinde tarayıcısı sayfanızı indirir ve üzerindeki kodu çalıştırır — menülerin açılmasını, düğmelerin çalışmasını, ödeme formlarının gönderilebilmesini sağlayan komut dosyaları ve benzeri. Varsayılan olarak tarayıcı bunların tümüne güvenir. Hangisinin gerçekten sizin olduğunu, hangisinin başkası tarafından sızdırıldığını ayırt etme yolu yoktur.

İçerik Güvenliği Politikası (kısaca CSP) web sitenizin her sayfaya eklediği kısa kural listesidir; tarayıcıya şunu söyler: “Yalnızca onayladığım bu kaynaklardan gelen kodu çalıştır, geri kalanını reddet.” Bu, herkesi içeri alan gece kulübü ile kapıda misafir listesi olan arasındaki fark gibidir.

Bunun bu kadar önemli olmasının nedeni, web sitelerinin sürekli olarak kurcalanmasıdır — her zaman sunucunuzu hackleyerek değil, çoğu sitenin açık bıraktığı arka kapılar aracılığıyla: yorum alanı, arama kutusu, eski eklenti, reklamlar veya analitik için üçüncü taraf komut dosyası ya da bir sohbet widget’ı. Bir saldırgan sayfalarınızdan birine kendi kodunun tek satırını sokabilirse tarayıcı onu sizinmiş gibi çalıştırır. Oradan müşterilerin yazdığı her şeyi — kart numaraları, şifreler, adresler — okuyup sessizce başka yere gönderebilir. İçerik Güvenliği Politikası onaylamadığınız bir kaynaktan gelen her şeyi çalıştırmayı reddederek bu kapıyı kapatır.

Size maliyeti ne olabilir

Bu soyut değil. İçerik Güvenliği Politikasının önlediği saldırı — bir sayfaya enjekte edilen ve kendi müşterilerinizden veri çalan kod — kayıt tarihindeki en büyük kart kopyalama ihlallerinin bazılarının arkasındadır. Normal bir işletme için nasıl geliştiği:

Teknik olarak nedir (ayrıntı)

İçerik Güvenliği Politikası, web sunucunuzun her sayfayla gönderdiği tek bir HTTP yanıt başlığı olarak iletilir. Değeri, her içerik türünü ve bunun için izin verilen kaynakları adlandıran direktifler kümesidir. Örneğin:

Content-Security-Policy: default-src 'self'; script-src 'self'; object-src 'none'; frame-ancestors 'self'

Sade dilde şunu söyler: varsayılan olarak yalnızca kendi sitenden şey yükle; yalnızca kendi sitenden komut dosyaları çalıştır; eski türden eklentilere izin verme; başka siteler benimkini çerçeveye alma.

“İyi” neye benzer. Kontrolümüz yalnızca başlığın varlığına bakmaz — politikayı direktif direktif okur ve gerçekte ne kadar güçlü olduğunu bir güvenlik değerlendirmecisi gibi puanlar. Güçlü politika:

'unsafe-inline', 'unsafe-eval' veya joker karakterlere dayanan politika hâlâ düşük puan alır — çünkü pratikte çok az gerçek koruma sağlar. Hedef sıkı politika, sadece herhangi bir politikadır.

Nasıl düzeltilir (ücretsiz, ~1–2 saat)

BT uzmanınıza veya web sitenizi çalıştıran kişiye iletin — düzeltmenin kendisi tamamen ücretsizdir. Yalnızca zamanla yerinde ve doğru kaldığını izlemek için ücret alıyoruz; açmak hiçbir şeye mal olmaz. Bunun dakikalar yerine bir iki saat almasının nedeni, kendi sitenizin bazı bölümlerini yanlışlıkla engellemesini önleyen dikkatli deneme adımıdır.

  1. Yalnızca raporlama modunda başlayın — henüz uygulamayın. Content-Security-Policy-Report-Only yanıt başlığı ekleyin. Bu, canlı site çalışmaya devam ederken engellenen şeyleri izler ve kaydeder; böylece her sayfanın gerçekten neye dayandığını öğrenirsiniz. (Önemli: tek başına yalnızca raporlama ziyaretçilere hiç koruma sağlamaz — yalnızca güvenli ilk adımdır.)

  2. Politikayı sitenizin gerçekte kullandıklarından oluşturun. Her meşru komut dosyası, stil, yazı tipi ve resim kaynağını bulmak için raporları inceleyin — kendi alan adınız, analitikleriniz, ödeme sağlayıcınız, yazı tipi barındırıcınız, sohbet widget’ınız — ve bunları izin verilen kaynaklar olarak listeleyin. Sağlam başlangıç noktası, gerçekten kullandığınız güvenilir üçüncü taraflar için açık girişler artı default-src 'self'’dir.

  3. Tüm amacı bozan boşluklardan kaçının. Komut dosyaları için 'unsafe-inline' ve 'unsafe-eval'’den uzak durun; komut dosyaları için * ve https: gibi joker karakter kaynaklar kullanmayın — bunlar politikanın kapatmak için tasarlandığı tam açığı yeniden açar. Satır içi komut dosyaları kaçınılmazsa yalnızca belirli onaylı kodunuzun çalışması için nonce veya hash kullanın.

  4. Çerçeveleme ve eklentileri kilitleyin. frame-ancestors 'self' ekleyin (bu aynı zamanda başka sitelerin sizinkini yerleştirerek müşterileri aldatmasını da önler ve ilgili tıklama korsanlığı kontrolünü de karşılar) ve eski eklenti tabanlı saldırıları engellemek için object-src 'none' ekleyin.

  5. Yalnızca raporlamadan uygulamaya geçin. Raporlar temizlenip site çalışmaya devam ettiğinde başlık adını Content-Security-Policy-Report-Only’den Content-Security-Policy’e değiştirin. Gerçek korumayı sağlayan adım budur — yalnızca raporlama politikası sağlamaz ve kontrolü geçmez.

    Başlığı nereye ayarlayacağınız platforma göre değişir:

    • Cloudflare: Kurallar → Dönüştürme Kuralları → Yanıt Başlığını Değiştir → Content-Security-Policy ayarlayın.
    • Nginx: add_header Content-Security-Policy "default-src 'self'; script-src 'self'; object-src 'none'; frame-ancestors 'self';" always;
    • Apache: Header always set Content-Security-Policy "default-src 'self'; script-src 'self'; object-src 'none'; frame-ancestors 'self';"
    • IIS (web.config): Content-Security-Policy adlı ve politikayı değer olarak içeren özel HTTP yanıt başlığı ekleyin.
    • Google Workspace / Microsoft 365: Bunlar e-postanızı çalıştırır, genel web sitenizi değil; dolayısıyla politika, web sitenizin gerçekte barındırıldığı yer olan (Cloudflare veya yukarıdaki web barındırıcınız) ayarlanır, e-posta yönetici konsolunuzda değil.
  6. Alan adınızı yeniden kontrol edin ve politikanın şimdi açık ve uygulandığını, zayıflatan boşluklar olmadığını doğrulayın.

Yaygın hatalar

SSS

Teknik bilgim yok — bunu kendim halledebilir miyim?

Ayrıntıları anlamanıza gerek yok. Bu, web sitenizi veya barındırmanızı çalıştıran kişi tarafından eklenen bir ayardır ve Cloudflare gibi hizmetlerde büyük ölçüde yönlendirmelidir. 'Nasıl düzeltilir?' bölümünü onlara iletin. Ücretsizdir; dikkat edilmesi gereken nokta, kendi sitenizin bazı bölümlerini yanlışlıkla engellemeyecek şekilde önce izle modunda başlatılmasıdır — adımlar tam olarak bunu kapsar.

Zaten asma kilit ve SSL sertifikasına sahibim — sitem güvenli değil mi?

Asma kilit sayfanızın teslimini güvence altına alır; içinde çalışanı kontrol etmez. Sayfaya kötü niyetli bir kod bulaşırsa — hacklenmiş eklenti, güvenliği ihlal edilmiş reklam veya enjekte edilmiş alan aracılığıyla — asma kilit veri çalmayı durdurmaz. İçerik Güvenliği Politikası, ilk elde neyin çalışmasına izin verileceğini sınırlayan katmandır. Farklı şeyleri korurlar ve her ikisini de istersiniz.

Bunu açmak siteyi bozabilir mi?

Bir anda agresif şekilde açılırsa olabilir; çünkü gerçekten kullandığınız meşru komut dosyalarını engelleyebilir. Bu yüzden standart yaklaşım, engellemeden izleyen 'yalnızca raporlama' deneme modunda başlamak, işaretlediklerini düzeltmek ve ancak sonra uygulamaktır. Bu şekilde yapıldığında güvenlidir — ve deneme adımı aşağıdaki düzeltmeye yerleştirilmiştir.

Zaten 'yalnızca raporlama' moduna aldık — korunuyor muyuz?

Hayır ve bu en yaygın yanlış güvenlik hissidir. Yalnızca raporlama modu, engellenen şeyleri izler ve kaydeder ama hiçbir şeyi engellemez — ziyaretçiler sıfır gerçek koruma alır. Yalnızca güvenli ilk adımdır. Kontrolümüz yalnızca raporlamaya gerçek politikanın küçük bir bölümü kadar kredi verir ve geçiş olarak kaydetmez. Uygulama moduna geçtiğinizde korunursunuz.

Bu notumumuzu etkiler mi yoksa yalnızca tavsiye mi?

Notunuzu etkiler. İçerik Güvenliği Politikası kontrolü puanlanır ve Web Güvenliği kategorisinde 25 puana kadar değer taşır. Eksik veya zayıf politika yüksek önem derecesiyle işaretlenir ve notunuzu düşürür — ve tam olarak bir müşterinin güvenlik anketinin sorduğu türden bir açıktır.

Geliştirici politika ekledi ama puan hâlâ düşük — neden?

Politika var olabilir ama hâlâ zayıf olabilir. En yaygın suçlular 'unsafe-inline' ve 'unsafe-eval' gibi komut dosyaları için boşluklar veya politikanın kapatmak için tasarlandığı tam açığı yeniden açan joker karakter kaynaklardır. Kontrolümüz politikayı direktif direktif okur ve bu zayıflıkları puanlar — her şeye izin veren politika yoktan biraz iyidir. Düzeltme, bu boşluklar yerine nonce'lar veya hash'ler kullanmaktır.