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ıkAmaçÖrnek değer
Strict-Transport-SecurityTarayıcıyı yalnızca HTTPS kullanmaya zorlarmax-age=31536000; includeSubDomains
Content-Security-PolicyHangi kaynaklardan içerik yüklenebileceğini tanımlardefault-src 'self'; frame-ancestors 'self'
X-Content-Type-OptionsMIME türü tahminini kapatırnosniff
Referrer-PolicyBaşka sitelere gönderilen yönlendiren bilgisini sınırlarstrict-origin-when-cross-origin
Permissions-PolicyKamera, mikrofon, konum gibi tarayıcı özelliklerini kısıtlarcamera=(), microphone=(), geolocation=()
X-Frame-OptionsEski tarayıcılar için çerçeveleme korumasıSAMEORIGIN
Modern tarayıcılarda çerçeveleme koruması için CSP'nin 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:

ÖznitelikAmaç
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.

Başlık yapılandırmanızı sürüm kontrolünde tutun ve her değişiklikten sonra otomatik bir testle doğrulayın. Böylece yeni bir sunucu veya CDN ayarı başlıkları sessizce kaldırdığında hemen fark edersiniz.

Sık yapılan hatalar

  • Başlığı yalnızca başarılı yanıtlara eklemek: Nginx'te always parametresi 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-Protection ve Expect-CT gibi 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

  1. OWASP HTTP Headers Cheat Sheet
  2. OWASP Secure Headers Project
  3. MDN Web Docs — Content Security Policy (CSP)

#hsts #http-basliklari #csp #web-guvenligi

İlgili içerikler