İçerik Güvenliği Politikası (CSP), önemi, nasıl çalıştığı ve web güvenliğini nasıl geliştirdiği hakkında bilgi edinin.
İçerik Güvenliği Politikası (CSP) nedir?
İçerik Güvenliği Politikası (CSP), bir web sayfasının yüklenmesine izin verilen kaynakları kontrol ederek, özellikle siteler arası komut dosyası (XSS) ve veri enjeksiyon saldırıları gibi belirli saldırı türlerini tespit etmeye ve azaltmaya yardımcı olan ek bir güvenlik katmanıdır.
CSP, Web geliştiricilerinin tarayıcının hangi kökenleri güvenilir içerik kaynakları olarak düşünmesi gerektiğini açıkça belirtmelerine olanak tanıyan bir HTTP başlığı aracılığıyla uygulanır. Bu, kötü amaçlı komut dosyalarının veya diğer zararlı içeriğin kullanıcının tarayıcısında yürütülmesini önlemeye yardımcı olur.
CSP neden önemlidir?
Modern web uygulamaları genellikle çeşitli kaynaklardan gelen komut dosyaları, stil sayfaları, görüntüler ve medya dosyaları kullanır. Bu karmaşıklık, saldırganlara kötü amaçlı kod enjekte etmeleri için fırsatlar sunar ve XSS en yaygın saldırı vektörlerinden biridir. XSS saldırıları kullanıcı oturumlarını, hassas bilgileri veya web sitesinin kendisini tehlikeye atabilir.
CSP, bu tehditlerin çeşitli şekillerde hafifletilmesinde önemli bir rol oynamaktadır:
- XSS saldırılarını önler: Güvenilir komut dosyası kaynaklarını belirterek, CSP kötü amaçlı komut dosyalarının enjekte edilmesini ve yürütülmesini engeller.
- Veri Eksfiltrasyonunu Önler: Veri iletimini belirli alanlarla sınırlayabilir ve hassas bilgilerin sızmasını önleyebilir.
- Tıklamayı önler:
frame-ancestors
Direktif, diğer sitelerin sayfayı nasıl çerçeveleyebileceğini kontrol eder, böylece tıklama saldırılarını önler. - Karışık İçeriği Önler: HTTP içeriğinin HTTPS sayfalarına yüklenmesini önleyerek güvenli bir bağlantının korunmasına yardımcı olur.
CSP nasıl çalışır?
Web sunucusu gönderir Content-Security-Policy
HTTP Başlığı İstemciye (Tarayıcı). Bu başlık, sayfanın yüklemesine izin verilen kaynaklar için kurallar olan bir dizi ilke yönergesini içerir.
Örneğin, aşağıdaki CSP başlığı, komut dosyalarının yalnızca geçerli etki alanından yüklenmesine izin verir ('self'
) ve diğer tüm kökenlerden komut dosyalarını bloke eder:
Content-Security-Policy: script-src 'self';
Tarayıcı bu başlığı aldığında, sayfadaki tüm kaynak istekleri için politikayı uygular. Politikayı ihlal eden bir kaynak yükleme girişiminde bulunulursa, tarayıcı bu kaynağı engeller ve belirli bir uç noktaya bir ihlal raporu gönderebilir.
Anahtar CSP Direktifleri
CSP, kaynak türleri üzerinde ince taneli kontrol için çeşitli yönergeler sunar. Bazı önemli yönergeler şunları içerir:
default-src
: Diğer birçok yönerge için varsayılan bir ilke belirler. Belirli bir yönerge ayarlanmazsa, bu değer kullanılır.script-src
: JavaScript kodu için geçerli kaynakları belirtir.style-src
: CSS stil sayfaları için geçerli kaynakları belirtir.img-src
: Görüntüler için geçerli kaynakları belirtir.font-src
: Yazı tipleri için geçerli kaynakları belirtir.media-src
: Ses ve video gibi medya dosyaları için geçerli kaynakları belirtir.connect-src
: Kullanıma bağlanabilecek kökenleri kısıtlarfetch
–XMLHttpRequest
–WebSocket
–EventSource
vesaire.frame-src
: Çerçeveler olarak gömülebilen geçerli kaynakları belirtir. (Kullanımdan kaldırıldı,child-src
önerilir).child-src
: Web çalışanları ve çerçeveler gibi iç içe göz atma bağlamları için geçerli kaynakları belirtir.object-src
: İçin geçerli kaynakları kontrol eder,
Ve
Etiketler. Bunu ayarlamanız önerilir
'none'
güvenlik nedeniyle.frame-ancestors
: Geçerli sayfayı çerçeveler, iframes, nesneler, gömme veya uygulamalar kullanarak yerleştirebilen geçerli üst düzey kökenleri belirtir. Bu, tıklama saldırılarına karşı savunmak için çok önemlidir.report-uri
/report-to
: Bir CSP ihlali meydana geldiğinde tarayıcının rapor göndereceği bir URL belirtir.report-to
JSON biçimlendirilmiş raporları destekleyen daha yeni bir yönerge vereport-uri
.
Kaynak Değerleri
Her yönerge şu şekilde kaynak değerlerine sahip olabilir:
'self'
: Mevcut kökene (aynı şema, ana bilgisayar ve bağlantı noktası) izin verir.'unsafe-inline'
: Satır içi JavaScript’e izin verir () ve satır içi CSS (
,
style
bağlanmak). Güvenlik riskleri nedeniyle kullanımı en aza indirilmelidir.'unsafe-eval'
: Metin-JavaScript mekanizmalarına benzereval()
. Güvenlik riskleri nedeniyle kullanımı en aza indirilmelidir.'none'
: Kaynaklara izin vermez.https://example.com
: Belirli bir etki alanına izin verir.*.example.com
: Örnek.com’un tüm alt alanlarına izin verir.data:
: Kaynakları kullanarak kaynaklardata:
Şema (örn. Base64 kodlu görüntüler).nonce-
: Belirli bir şifreleme nonce (bir kez kullanılan sayı) ile komut dosyalarına veya stillere izin verir. Sunucu, her istek için benzersiz bir nonce oluşturmalı ve başlık ve komut dosyası etiketlerine eklemelidir.sha256-
: Belirli bir karma değerine uygun satır içi komut dosyalarına veya stillere izin verir.
CSP nasıl uygulanır
CSP öncelikle iki şekilde uygulanabilir:
HTTP Başlığı: Bu en çok önerilen yöntemdir. Ayarlamak
Content-Security-Policy
Web sunucusu yapılandırmanızdaki başlık (örn. Apache, Nginx) veya arka uç uygulama kodunda.- Nginx örneği:
add_header Content-Security-Policy "default-src 'self'; script-src 'self' https://trusted-cdn.com";
- Apache Örneği:
Header set Content-Security-Policy "default-src 'self'; script-src 'self' https://trusted-cdn.com"
- Nginx örneği:
Etiket: CSP’yi bir kullanarak tanımlayabilirsiniz.
Etiket
section of your HTML document.
<meta http-equiv="Content-Security-Policy" content="default-src 'self'; script-src 'self' https://trusted-cdn.com;">
Ancak,
TAG’ın desteklenmemesi gibi bazı sınırlamaları var
frame-ancestors
–report-uri
Vesandbox
Direktifler. Bu nedenle, mümkün olduğunda HTTP başlık yönteminin kullanılması tercih edilir.
CSP Uygulama Stratejisi
CSP’yi ilk tanıtarken, katı bir politika mevcut web sitesi işlevselliğini bozabilir. Bu nedenle, kademeli bir sunum çok önemlidir.
Yalnızca rapor mod:
Content-Security-Policy-Report-Only
Politikayı uygulamadan ihlal raporları alacak başlık. Bu, şu anda hangi kaynakların yüklendiğini belirlemeye yardımcı olur ve politikayı buna göre ayarlar.Content-Security-Policy-Report-Only: default-src 'self'; report-uri /csp-violation-report-endpoint;
Kademeli Politika Sıkılaştırma: Hafif bir politika ile başlayın (örn.
default-src 'self' 'unsafe-inline' https: data:
) ve ihlal raporlarını analiz ederek yavaş yavaş sıkılaştırın. Amaç ortadan kaldırmaktır'unsafe-inline'
Ve'unsafe-eval'
ve kaynakları mümkün olduğunca kesin olarak belirtin.Nones veya Hashes kullanın: Satır içi komut dosyaları veya stiller kesinlikle gerekliyse,
'unsafe-inline'
Güvenliği artırmak için.Sürekli İzleme ve Güncellemeler: CSP politikası, Set-It-ve Forget-IT çözümü değildir. Web siteniz değiştikçe, politika buna göre güncellenmelidir. İhlal raporlarını düzenli olarak izleyin ve politikayı gerektiği gibi ayarlayın.
CSP’nin faydaları
- Güçlü XSS savunması: Birincil fayda, güvenilmeyen komut dosyası yürütmeyi engelleyerek XSS saldırılarını etkili bir şekilde hafifletir.
- Azaltılmış veri enjeksiyon saldırıları: Kötü niyetli veri enjeksiyonu girişimlerini sınırlar.
- Tıklama Koruması: Sayfanızın kötü niyetli siteler tarafından çerçevelenmesini önler
frame-ancestors
. - Gelişmiş Güvenlik Farkındalığı: CSP’nin uygulanması, web siteniz tarafından kullanılan tüm kaynakların anlaşılmasını geliştirir ve daha iyi güvenlik bilincini teşvik eder.
Çözüm
İçerik Güvenliği Politikası (CSP), modern web uygulama güvenliğinin önemli bir parçasıdır. Kullanıcıları ve verileri XSS gibi ortak web saldırılarından korumak için güçlü bir mekanizma sağlar. CSP’nin uygulanması ve sürdürülmesi biraz karmaşık olsa da, sunduğu güvenlik avantajları önemlidir. Kademeli bir sunum stratejisi ve sürekli izleme, web sitenizin güvenlik duruşunu büyük ölçüde artırabilir.