Web uygulamalarında kullanılan JavaScript, CSS, yazı tipi, görsel ve medya dosyaları farklı kaynaklardan yüklenebilir. Bu esneklik geliştirme sürecini kolaylaştırsa da kötü amaçlı kodların çalıştırılması veya güvenilmeyen kaynaklardan içerik çekilmesi gibi riskler oluşturabilir. Content Security Policy, tarayıcının hangi kaynaklara güveneceğini belirleyerek web uygulamalarına ek bir güvenlik katmanı kazandırır. Bu rehberde Content Security Policy nedir, CSP başlığı nasıl çalışır ve güvenli biçimde nasıl yapılandırılır sorularını ele alıyoruz.

Content Security Policy Nedir?
Content Security Policy, Türkçede İçerik Güvenliği Politikası olarak ifade edilen bir tarayıcı güvenlik mekanizmasıdır. Web sunucusu tarafından gönderilen CSP başlığı, sayfa içerisinde hangi kaynaklardan içerik yüklenebileceğini belirler.
Bu politika sayesinde JavaScript dosyaları, stil dosyaları, görseller, yazı tipleri, medya içerikleri ve iframe bağlantıları için ayrı kurallar oluşturulabilir. Tarayıcı, belirlenen politikanın dışında kalan bir kaynak tespit ettiğinde ilgili içeriğin yüklenmesini veya çalıştırılmasını engelleyebilir.
CSP özellikle Cross-Site Scripting olarak bilinen XSS saldırılarının etkisini azaltmak amacıyla kullanılır. Ancak tek başına bütün güvenlik açıklarını ortadan kaldırmaz. Güvenli kodlama, güncel yazılım kullanımı ve düzenli güvenlik kontrolleriyle birlikte uygulanması gerekir.

CSP Başlığı Nasıl Çalışır?
Kullanıcı web sayfasını ziyaret ettiğinde sunucu, HTML içeriğiyle birlikte HTTP yanıt başlıklarını da gönderir. Content-Security-Policy başlığı bu yanıt içerisinde yer alır.
Tarayıcı, sayfadaki kaynakları yüklemeden önce CSP kurallarını inceler. Bir JavaScript dosyası veya görsel izin verilen kaynaklar arasındaysa yükleme işlemi gerçekleştirilir. Kaynak politika dışında kalıyorsa tarayıcı isteği engeller ve geliştirici konsolunda bir CSP hatası gösterebilir.
Temel bir CSP başlığı aşağıdaki şekilde yapılandırılabilir:
Content-Security-Policy: default-src 'self';
Bu kural, sayfadaki içeriklerin yalnızca mevcut alan adından yüklenmesine izin verir. Buradaki 'self' ifadesi, ziyaret edilen sayfanın kendi kaynağını temsil eder.

CSP Yönergeleri Nelerdir?
CSP yapılandırması farklı içerik türlerini yöneten direktiflerden oluşur. Her direktif, tarayıcının belirli bir kaynak türü için nasıl davranacağını belirler.
Yaygın olarak kullanılan CSP direktifleri şunlardır:
default-src: Özel bir kural tanımlanmayan kaynaklar için varsayılan politikayı belirler.script-src: JavaScript dosyalarının ve kodlarının hangi kaynaklardan çalıştırılabileceğini yönetir.style-src: CSS dosyaları ile sayfa içi stil kullanımlarını sınırlandırır.img-src: Görsellerin yüklenebileceği kaynakları tanımlar.font-src: Web yazı tiplerinin alınabileceği konumları belirler.connect-src: API, WebSocket ve benzeri bağlantıların kurulabileceği kaynakları yönetir.frame-src: Sayfaya iframe aracılığıyla eklenebilecek içerikleri sınırlandırır.object-src: Eklenti tabanlı nesnelerin yüklenmesini kontrol eder.form-action: Form verilerinin gönderilebileceği adresleri belirler.frame-ancestors: Sayfanın başka sitelerde iframe içerisinde açılıp açılamayacağını düzenler.
Her direktif noktalı virgülle ayrılır. Böylece tek bir HTTP başlığı içerisinde birden fazla güvenlik kuralı tanımlanabilir.

CSP Başlığı Nasıl Yapılandırılır?
CSP politikası hazırlanırken önce web sayfasının kullandığı kaynaklar belirlenmelidir. JavaScript, CSS, görsel, yazı tipi ve API bağlantıları ayrı ayrı incelenmelidir.
Sadece aynı alan adındaki kaynaklara izin veren örnek bir yapılandırma şöyledir:
Content-Security-Policy: default-src 'self'; script-src 'self'; style-src 'self'; img-src 'self' data:; object-src 'none'; frame-ancestors 'self'; form-action 'self';
Bu yapılandırmada kaynakların genel olarak yalnızca mevcut alan adından yüklenmesine izin verilir. data: ifadesi veri URI biçimindeki görselleri destekler. object-src 'none' eklenti tabanlı nesneleri kapatırken form-action 'self' form gönderimlerini aynı kaynağa sınırlandırır.
CSP başlığı Apache, Nginx veya uygulama katmanı üzerinden eklenebilir. Kullanılan yönteme göre yapılandırma dosyasının biçimi değişse de tarayıcıya gönderilen başlığın içeriği aynı mantıkla çalışır.

Inline JavaScript ve CSS Nasıl Yönetilir?
Sayfa içerisine doğrudan yazılan JavaScript ve CSS kodları CSP yapılandırmalarında sorun oluşturabilir. Güvenliği artırmak için bu kodların ayrı dosyalara taşınması ve yalnızca güvenilir kaynaklardan yüklenmesi önerilir.
Bazı projelerde sayfa içi kodların çalıştırılması zorunlu olabilir. Bu durumda nonce veya hash tabanlı yetkilendirme yöntemleri kullanılabilir. Nonce, her HTTP yanıtında yeniden oluşturulan tahmin edilmesi zor bir değerdir. Yalnızca aynı nonce değerini taşıyan kod bloklarının çalışmasına izin verilir.
'unsafe-inline' ifadesi sayfa içi kodların genel olarak çalıştırılmasını sağlar. Ancak CSP korumasını zayıflatabileceği için mümkün olduğunca kullanılmamalıdır. Benzer şekilde JavaScript değerlendirme fonksiyonlarına izin veren 'unsafe-eval' seçeneği de gerekli olmadığı sürece etkinleştirilmemelidir.

CSP Report-Only Modu Nedir?
Yeni bir CSP politikası doğrudan aktif edildiğinde web sayfasındaki gerekli dosyalar yanlışlıkla engellenebilir. Bu nedenle yapılandırmanın önce raporlama modunda test edilmesi faydalıdır.
Raporlama modu aşağıdaki başlıkla uygulanır:
Content-Security-Policy-Report-Only: default-src 'self';
Bu başlık, ihlalleri tarayıcı konsolunda gösterir ancak kaynakları hemen engellemez. Gerekli kontroller tamamlandıktan ve politika hataları giderildikten sonra standart Content-Security-Policy başlığına geçilebilir.
Raporlama modu kalıcı bir koruma sağlamaz. Yalnızca oluşturulan kuralların web sayfası üzerindeki etkisini görmek ve eksik kaynakları belirlemek amacıyla kullanılmalıdır.

CSP Yapılandırılırken Nelere Dikkat Edilmelidir?
Her web uygulamasının kullandığı kaynaklar farklı olduğu için tek bir CSP politikası bütün projelere doğrudan uygulanamaz. Çok geniş izinler vermek politikanın etkisini azaltırken aşırı kısıtlayıcı kurallar sayfanın bazı bölümlerinin çalışmamasına neden olabilir.
Yapılandırma sırasında tarayıcı geliştirici konsolu kontrol edilmeli, engellenen kaynaklar incelenmeli ve yalnızca gerçekten ihtiyaç duyulan izinler eklenmelidir. Yeni eklenti, tema veya entegrasyon kurulduğunda CSP politikasının tekrar gözden geçirilmesi gerekir.
CSP, uygulamadaki güvenlik açıklarını düzeltmek yerine saldırıların etkisini sınırlandırmaya yardımcı olur. Bu nedenle kullanıcı girdileri doğrulanmalı, çıktılar güvenli biçimde işlenmeli ve kullanılan yazılımlar güncel tutulmalıdır.
Sonuç
Content Security Policy, web sayfasında çalıştırılabilecek kodları ve yüklenebilecek kaynakları sınırlandıran önemli bir güvenlik katmanıdır. Doğru yapılandırılan CSP başlığı; kötü amaçlı kodların çalıştırılmasını zorlaştırabilir, güvenilmeyen içerikleri engelleyebilir ve XSS saldırılarının etkisini azaltabilir. Politikanın önce raporlama modunda test edilmesi ve yalnızca ihtiyaç duyulan kaynaklara izin verilmesi sağlıklı bir yapılandırma için önemlidir.

Domainhizmetleri olarak hızlı, güvenli ve stabil hosting altyapımızla web projelerinize uygun çözümler sunuyoruz. Güvenlik katmanlarıyla desteklenen hosting hizmetlerimizden yararlanarak web sitenizin daha güvenli bir ortamda yayınlanmasını sağlayabilirsiniz.




