HTTP güvenlik başlıkları, web sitenizi XSS, clickjacking, MIME sniffing ve man-in-the-middle gibi yaygın saldırılara karşı koruyan sunucu tarafı yapılandırmalardır. Doğru yapılandırılmış güvenlik başlıkları, uygulamanızın güvenlik katmanlarından birini oluşturur ve modern web güvenliğinin temelini oluşturur.
Content-Security-Policy (CSP)
CSP, tarayıcıya hangi kaynaklardan içerik yüklenmesine izin verildiğini söyleyen en güçlü güvenlik başlığıdır. XSS saldırılarına karşı en etkili savunma mekanizmasıdır:
Content-Security-Policy:
default-src 'self';
script-src 'self' 'nonce-abc123' https://cdn.example.com;
style-src 'self' 'unsafe-inline';
img-src 'self' data: https:;
font-src 'self' https://fonts.gstatic.com;
connect-src 'self' https://api.example.com;
frame-ancestors 'none';
Temel CSP direktifleri:
default-src— Diğer direktifler belirtilmediğinde kullanılan varsayılan kaynakscript-src— JavaScript kaynakları.'unsafe-inline've'unsafe-eval'yerine nonce veya hash kullanınstyle-src— CSS kaynaklarıimg-src— Görsel kaynaklarıconnect-src— AJAX, WebSocket ve EventSource bağlantılarıfont-src— Font dosyası kaynaklarıframe-ancestors— Sayfanızı iframe içinde gömebilecek kaynaklar
İpucu: CSP'yi ilk kez uygularken Content-Security-Policy-Report-Only başlığını kullanarak ihlalleri engellemeden yalnızca raporlayabilirsiniz.
Strict-Transport-Security (HSTS)
HSTS, tarayıcıya sitenize yalnızca HTTPS üzerinden erişmesini söyler ve HTTP'den HTTPS'e yönlendirme sırasındaki man-in-the-middle saldırı penceresini kapatır:
Strict-Transport-Security: max-age=31536000; includeSubDomains; preload
max-age— HSTS politikasının geçerlilik süresi (saniye cinsinden). 1 yıl (31536000) önerilirincludeSubDomains— Alt alan adlarını da kapsarpreload— Tarayıcıların HSTS preload listesine eklenmesini sağlar. Bu, ilk ziyarette bile HTTPS'i zorunlu kılar
Dikkat: HSTS'i etkinleştirmeden önce sitenizin HTTPS'in düzgün çalıştığından emin olun. Yanlış yapılandırma, sitenize erişimi tamamen engelleyebilir.
X-Content-Type-Options
MIME sniffing saldırılarını önler. Tarayıcının, sunucunun belirttiği Content-Type'ı değiştirmemesini sağlar:
X-Content-Type-Options: nosniff
Bu başlık olmadan, tarayıcı bir dosyanın içeriğini "koklayarak" türünü tahmin edebilir. Örneğin, düz metin olarak sunulan bir dosya JavaScript olarak çalıştırılabilir.
X-Frame-Options
Clickjacking saldırılarını önler. Sayfanızın bir iframe içinde gösterilip gösterilmeyeceğini kontrol eder:
X-Frame-Options: DENY
# veya
X-Frame-Options: SAMEORIGIN
DENY— Hiçbir site bu sayfayı iframe içinde gösteremezSAMEORIGIN— Yalnızca aynı origin iframe içinde gösterebilir
Not: Modern tarayıcılarda CSP'nin frame-ancestors direktifi X-Frame-Options'ın yerini almaktadır, ancak geriye dönük uyumluluk için her ikisini de kullanmak iyi bir uygulamadır.
Referrer-Policy
Bir bağlantıya tıklandığında hedef siteye ne kadar referrer bilgisi gönderileceğini kontrol eder:
Referrer-Policy: strict-origin-when-cross-origin
Yaygın değerler:
no-referrer— Hiçbir referrer bilgisi gönderilmezsame-origin— Yalnızca aynı origin'e referrer gönderilirstrict-origin-when-cross-origin— Aynı origin'e tam URL, farklı origin'e yalnızca origin gönderilir (önerilen)no-referrer-when-downgrade— HTTPS'ten HTTP'ye geçişte referrer gönderilmez
Permissions-Policy
Tarayıcı özelliklerinin ve API'lerin kullanımını kontrol eder (eski adıyla Feature-Policy):
Permissions-Policy:
camera=(),
microphone=(),
geolocation=(self),
payment=(self "https://payment.example.com"),
accelerometer=(),
gyroscope=()
()— Özellik tamamen devre dışı(self)— Yalnızca kendi origin'inde kullanılabilir*— Herkes kullanabilir
Kullanmadığınız API'leri devre dışı bırakarak üçüncü parti scriptlerin bu özelliklere erişimini engellersiniz.
Tüm Başlıkların Özeti
Önerilen minimum güvenlik başlığı yapılandırması:
# Nginx örneği
add_header Content-Security-Policy "default-src 'self'; script-src 'self'" always;
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
add_header X-Content-Type-Options "nosniff" always;
add_header X-Frame-Options "DENY" always;
add_header Referrer-Policy "strict-origin-when-cross-origin" always;
add_header Permissions-Policy "camera=(), microphone=(), geolocation=()" always;
Test ve Doğrulama
- Tarayıcı DevTools'unda Network sekmesinden yanıt başlıklarını kontrol edin
- CSP ihlallerini izlemek için
report-uriveyareport-todirektiflerini kullanın - Online güvenlik başlığı tarayıcıları ile sitenizi düzenli olarak denetleyin
Sitenizin güvenlik başlıklarını analiz etmek ve doğru yapılandırmak için SiteScripti'nin Güvenlik Başlıkları Analizi ve HTTP Header Generator araçlarını kullanabilirsiniz.
Bu konuyla ilgili araçlarımızı da deneyin: Güvenlik Başlıkları Analiz, SSL Kontrol, Çerez Güvenlik Analizi