HTTP güvenlik başlıkları, sunucunun her yanıtla birlikte gönderdiği ve tarayıcıya sayfayı nasıl güvenli biçimde işleyeceğini söyleyen talimatlardır. Çoğu web sitesi için temel set şunlardır: Strict-Transport-Security, Content-Security-Policy, X-Content-Type-Options, Referrer-Policy, Permissions-Policy ve çerçeveleme koruması (frame-ancestors veya X-Frame-Options).
Güvenlik başlıkları neden önemlidir?
Bir web uygulamasındaki kod hatalarını tamamen ortadan kaldırmak zordur. Güvenlik başlıkları, tarayıcının yerleşik koruma özelliklerini devreye sokarak bu hataların istismar edilmesini zorlaştıran ek bir savunma katmanı sağlar. Örneğin:
- HSTS, bağlantının HTTPS'ten HTTP'ye düşürülmesini engeller.
- CSP, siteye enjekte edilmiş yabancı betiklerin çalışmasını sınırlar ve siteler arası betik çalıştırma (XSS) etkisini azaltır.
- Çerçeveleme koruması, sitenizin başka bir sayfaya gizlice gömülerek kullanıcının yanlış düğmeye tıklatılmasını (clickjacking) önler.
Başlıklar uygulamadaki zafiyetleri düzeltmez; ancak derinlemesine savunmanın ucuz ve etkili bir parçasıdır.
Temel başlıklar ve önerilen değerler
| Başlık | Amaç | Örnek değer |
|---|---|---|
Strict-Transport-Security | Tarayıcıyı yalnızca HTTPS kullanmaya zorlar | max-age=31536000; includeSubDomains |
Content-Security-Policy | Hangi kaynaklardan içerik yüklenebileceğini tanımlar | default-src 'self'; frame-ancestors 'self' |
X-Content-Type-Options | MIME türü tahminini kapatır | nosniff |
Referrer-Policy | Başka sitelere gönderilen yönlendiren bilgisini sınırlar | strict-origin-when-cross-origin |
Permissions-Policy | Kamera, mikrofon, konum gibi tarayıcı özelliklerini kısıtlar | camera=(), microphone=(), geolocation=() |
X-Frame-Options | Eski tarayıcılar için çerçeveleme koruması | SAMEORIGIN |
frame-ancestors yönergesi X-Frame-Options başlığının yerini almıştır. Uyumluluk için ikisini birlikte göndermek yaygın bir uygulamadır.Adım adım uygulama
1. Mevcut durumu ölçün
Önce sitenizin hangi başlıkları gönderdiğini görün. HTTP güvenlik başlıkları aracımız eksik ve hatalı başlıkları listeler.
2. Kolay başlıklarla başlayın
X-Content-Type-Options, Referrer-Policy ve Permissions-Policy genellikle siteyi bozmadan eklenebilir. Nginx için örnek:
add_header X-Content-Type-Options "nosniff" always;
add_header Referrer-Policy "strict-origin-when-cross-origin" always;
add_header Permissions-Policy "camera=(), microphone=(), geolocation=()" always;
Apache için aynı başlıklar Header always set yönergesiyle eklenir.
3. HSTS'yi kontrollü açın
Tüm sitenin ve alt alan adlarının HTTPS ile çalıştığından emin olduktan sonra HSTS'yi önce kısa bir max-age değeriyle, ardından bir yıllık değerle etkinleştirin. Ayrıntılar için HSTS rehberimize bakabilirsiniz.
4. CSP'yi izleme modunda deneyin
CSP en güçlü ama en dikkat isteyen başlıktır. Önce Content-Security-Policy-Report-Only ile yayımlayın, tarayıcı konsolundaki ihlalleri inceleyin, gerekli kaynakları politikaya ekleyin ve sonra zorunlu moda geçin. Satır içi betiklere izin vermek için 'unsafe-inline' yerine nonce veya hash tabanlı yaklaşımları tercih edin.
Çerezler ve diğer tamamlayıcı ayarlar
Güvenlik başlıkları tek başına yeterli değildir; oturum çerezlerinin de doğru özniteliklerle gönderilmesi gerekir. Set-Cookie başlığında şu öznitelikleri kullanın:
| Öznitelik | Amaç |
|---|---|
Secure | Çerez yalnızca HTTPS bağlantılarında gönderilir |
HttpOnly | Çereze JavaScript ile erişilemez; XSS durumunda çalınması zorlaşır |
SameSite=Lax veya Strict | Çerezin siteler arası isteklerde gönderilmesini sınırlar |
Ayrıca CORS (Access-Control-Allow-Origin) başlığını gerekmedikçe * olarak ayarlamayın; yalnızca güvendiğiniz kaynakları listeleyin. Sunucu sürüm bilgisini açığa çıkaran Server ve X-Powered-By gibi başlıkları kısaltmak veya kaldırmak doğrudan bir koruma sağlamaz, ancak saldırganın keşif aşamasını zorlaştırır.
Sık yapılan hatalar
- Başlığı yalnızca başarılı yanıtlara eklemek: Nginx'te
alwaysparametresi olmadan başlıklar hata sayfalarında gönderilmez. - Yinelenen başlıklar: Hem uygulama hem sunucu aynı başlığı eklerse tarayıcı beklenmedik davranabilir.
- Çok gevşek CSP:
default-src *veya'unsafe-inline' 'unsafe-eval'içeren politikalar koruma sağlamaz. - Kullanımdan kalkmış başlıklar:
X-XSS-ProtectionveExpect-CTgibi başlıklar artık önerilmez. - CDN önbelleğini unutmak: Başlık değişikliğinden sonra CDN önbelleğini temizlemezseniz eski yanıtlar sunulmaya devam edebilir.
Nasıl doğrularım?
Değişikliklerden sonra HTTP güvenlik başlıkları ve HSTS kontrol araçlarıyla sonucu doğrulayın. Daha geniş bir resim için web sitesi güvenlik testi TLS, yönlendirme ve başlıkları birlikte değerlendirir. Tarayıcının geliştirici araçlarındaki Ağ (Network) sekmesinde yanıt başlıklarını doğrudan da görebilirsiniz.
Sık sorulan sorular
X-XSS-Protection başlığını eklemeli miyim?
Hayır. Modern tarayıcılar bu başlığın dayandığı XSS filtresini kaldırmıştır ve OWASP bu başlığın kullanılmamasını ya da 0 değeriyle gönderilmesini önerir. XSS'e karşı asıl koruma doğru çıktı kodlaması ve Content-Security-Policy'dir.
CSP sitemi bozar mı?
Yanlış yapılandırılmış bir CSP betiklerin veya stillerin yüklenmesini engelleyebilir. Bu yüzden önce Content-Security-Policy-Report-Only başlığıyla politikayı izleme modunda deneyip ihlalleri inceledikten sonra zorunlu moda geçmeniz önerilir.
Başlıkları nereye eklemeliyim?
Başlıklar web sunucusu (Nginx, Apache, IIS), uygulama çatısı veya CDN düzeyinde eklenebilir. Tutarlılık için tüm yanıtların geçtiği tek bir katmanda tanımlamak ve yinelenen başlıklardan kaçınmak en iyisidir.
Sık sorulan sorular
X-XSS-Protection başlığını eklemeli miyim?
Hayır. Modern tarayıcılar bu başlığın dayandığı XSS filtresini kaldırmıştır ve OWASP bu başlığın kullanılmamasını ya da 0 değeriyle gönderilmesini önerir. XSS'e karşı asıl koruma doğru çıktı kodlaması ve Content-Security-Policy'dir.
CSP sitemi bozar mı?
Yanlış yapılandırılmış bir CSP betiklerin veya stillerin yüklenmesini engelleyebilir. Bu yüzden önce Content-Security-Policy-Report-Only başlığıyla politikayı izleme modunda deneyip ihlalleri inceledikten sonra zorunlu moda geçmeniz önerilir.
Başlıkları nereye eklemeliyim?
Başlıklar web sunucusu (Nginx, Apache, IIS), uygulama çatısı veya CDN düzeyinde eklenebilir. Tutarlılık için tüm yanıtların geçtiği tek bir katmanda tanımlamak ve yinelenen başlıklardan kaçınmak en iyisidir.
Kaynaklar
İlgili içerikler
HSTS Nedir? HTTP Strict Transport Security Nasıl Çalışır?
HSTS, bir web sitesinin tarayıcıya kendisine yalnızca HTTPS ile bağlanılmasını bildirdiği güvenlik mekanizmasıdır. Stri…
HSTS Nasıl Etkinleştirilir? Güvenli Geçiş ve Preload Adımları
HSTS, sunucunun Strict-Transport-Security başlığını göndermesiyle etkinleşir. Önce tüm siteyi HTTPS'e taşır, kısa bir m…
KOBİ'ler İçin Siber Güvenlik Kontrol Listesi: İlk 12 Adım
Küçük işletmeler için en etkili başlangıç; varlık envanteri, MFA, güncellemeler, test edilmiş yedekler, e-posta kimlik…
KVKK Kapsamında Veri İhlali Bildirimi Nasıl Yapılır?
Kişisel veri ihlalinde veri sorumlusu, KVKK m.12/5 ve Kurul'un 2019/10 sayılı kararı uyarınca ihlali öğrendiği andan it…