# HTTP güvenlik başlıkları rehberi: HSTS, CSP ve diğerleri ne işe yarar?

Source: https://exextramer.com/blog/http-guvenlik-basliklari-rehberi/
Updated: 2026-11-02

Adres çubuğunda kilit simgesi görmek, sitenin HTTPS ile sunulduğunu gösterir; ama sitenin güvenli olduğunu tek başına kanıtlamaz. Tarayıcıya “bu sayfayı nasıl korumalısın?” sorusunun cevabını veren şey **HTTP güvenlik başlıklarıdır**. Bu başlıklar sunucunun her yanıtla birlikte gönderdiği kısa talimatlardır ve doğru ayarlandıklarında tıklama tuzağı (clickjacking), içerik enjeksiyonu ve bağlantı düşürme gibi saldırıların önemli bir kısmını engeller.

## Neden önemli?

Güvenlik başlıkları kod yazmadan, sunucu ayarıyla eklenebilen ucuz ama etkili bir savunma katmanıdır. Sitenizde bir açık olsa bile doğru bir içerik güvenliği politikası saldırının işe yaramasını zorlaştırır. Ayrıca kurumsal müşteriler, bankalar ve kamu kurumları tedarikçilerinin sitelerini bu başlıklar üzerinden hızlıca değerlendirir. Kendi sitenizin durumunu [güvenlik testimizle](/araclar/guvenlik-testi/) birkaç saniyede görebilirsiniz.

## Temel başlıklar ve görevleri

### Strict-Transport-Security (HSTS)

Tarayıcıya “bu alan adına bundan sonra yalnız HTTPS ile bağlan” der. Böylece kullanıcı adres çubuğuna `http://` yazsa bile bağlantı şifresiz kurulmaz ve araya girme saldırılarının bir türü engellenir.

- Örnek değer: `max-age=31536000; includeSubDomains`
- `max-age` saniye cinsindendir; 31536000 bir yıl demektir.
- `includeSubDomains` tüm alt alan adlarını da kapsar. Eklemeden önce **her alt alan adınızın** HTTPS ile çalıştığından emin olun.
- `preload` ifadesi ve tarayıcıların ön yükleme listesine kayıt, geri alınması aylar sürebilen bir karardır; acele etmeyin.

### Content-Security-Policy (CSP)

Sayfanın hangi kaynaklardan betik, stil, görsel ve çerçeve yükleyebileceğini belirler. Sitenize bir şekilde zararlı bir betik enjekte edilse bile, izin listesinde olmayan bir kaynaktan geliyorsa tarayıcı onu çalıştırmaz.

- Basit bir başlangıç: `default-src 'self'; img-src 'self' data: https:; object-src 'none'; base-uri 'self'`
- Satır içi betik kullanıyorsanız `'unsafe-inline'` yerine her istekte değişen bir **nonce** kullanmak çok daha güvenlidir.
- Önce `Content-Security-Policy-Report-Only` başlığıyla deneyin. Bu mod hiçbir şeyi engellemez, yalnız neyin engelleneceğini raporlar.

### X-Frame-Options ve frame-ancestors

Sitenizin başka bir sitede görünmez bir çerçeve içine yerleştirilip kullanıcının farkında olmadan tıklatılmasını (clickjacking) önler. `X-Frame-Options: SAMEORIGIN` eski tarayıcılar için, CSP içindeki `frame-ancestors 'self'` yönergesi ise modern tarayıcılar için kullanılır. İkisini birlikte göndermek zararsızdır.

### X-Content-Type-Options

`nosniff` değeriyle gönderilir. Tarayıcının bir dosyanın türünü tahmin etmeye çalışmasını engeller; örneğin bir metin dosyasının betik gibi çalıştırılmasının önüne geçer. Yan etkisi neredeyse yoktur, her sitede bulunmalıdır.

### Referrer-Policy

Ziyaretçi sitenizden başka bir siteye geçtiğinde hangi adres bilgisinin aktarılacağını belirler. `strict-origin-when-cross-origin` iyi bir varsayılandır: kendi siteniz içinde tam adres, dış sitelere ise yalnız alan adı gönderilir. Böylece adreste yer alabilecek arama terimleri veya kimlik bilgileri dışarı sızmaz.

### Permissions-Policy

Sayfanın kamera, mikrofon, konum, ödeme gibi tarayıcı özelliklerini kullanıp kullanamayacağını belirler. Bu özellikleri kullanmıyorsanız kapatmak, üçüncü taraf kodların bunlara erişmesini de engeller. Örnek: `camera=(), microphone=(), geolocation=()`.

## Güvenli ekleme sırası

Başlıkları tek seferde ve rastgele eklemek siteyi bozabilir. Şu sırayı öneriyoruz:

1. **Yan etkisi düşük olanlar:** `X-Content-Type-Options`, `Referrer-Policy`, `X-Frame-Options`.
2. **HTTPS’i sabitleyin:** Tüm sayfaların, görsellerin ve alt alan adlarının HTTPS ile açıldığını doğrulayın; sonra kısa bir `max-age` (örneğin bir gün) ile HSTS ekleyin ve sorun çıkmazsa bir yıla çıkarın.
3. **Permissions-Policy:** Kullanmadığınız özellikleri kapatın.
4. **CSP:** Önce rapor modunda bir iki hafta çalıştırın, raporlardaki meşru kaynakları izin listesine ekleyin, sonra engelleme moduna geçin.

Apache kullanan paylaşımlı barındırmalarda bu başlıklar genellikle `.htaccess` dosyasına `Header always set` satırlarıyla eklenir. Uygulamanız PHP ile yanıt üretiyorsa başlıkları kod içinden göndermek, özellikle nonce gerektiren CSP için daha esnektir.

## Sık yapılan hatalar

- **HSTS’yi alt alan adlarını kontrol etmeden eklemek:** HTTPS’i olmayan eski bir alt alan adı birden erişilemez hale gelir.
- **CSP’ye `*` veya `'unsafe-eval'` eklemek:** Politika var gibi görünür ama koruma neredeyse sıfırlanır.
- **Başlığı iki yerden göndermek:** Hem sunucu ayarı hem uygulama aynı başlığı farklı değerlerle gönderirse tarayıcı beklenmedik davranabilir.
- **Ekleyip test etmemek:** Her değişiklikten sonra formlar, ödeme sayfası, harita ve video gibi dış kaynak kullanan bölümleri mutlaka deneyin.

## Kontrol listesi

- Site ve tüm alt alan adları HTTPS ile açılıyor, HTTP istekleri tek adımda HTTPS’e yönleniyor.
- `Strict-Transport-Security` en az altı ay `max-age` ile gönderiliyor.
- `X-Content-Type-Options: nosniff` var.
- `X-Frame-Options` veya `frame-ancestors` tanımlı.
- `Referrer-Policy` ve `Permissions-Policy` tanımlı.
- CSP en azından rapor modunda çalışıyor.

## Örnek senaryo: CSP’yi bir kurumsal siteye eklemek

Google Analytics, bir canlı destek balonu ve gömülü bir YouTube videosu kullanan tipik bir kurumsal site düşünelim. CSP eklerken izlenecek yol şudur:

1. **Kaynak envanteri çıkarın.** Tarayıcının geliştirici araçlarındaki “Ağ” sekmesinde sayfanın hangi alan adlarından dosya yüklediğini listeleyin: kendi alan adınız, `www.googletagmanager.com`, canlı destek sağlayıcısının alan adı ve `www.youtube.com`.
2. **Rapor modunda başlayın.** Bu alan adlarını içeren bir politikayı `Content-Security-Policy-Report-Only` başlığıyla yayına alın. Tarayıcı konsolunda ihlal uyarılarını izleyin.
3. **Eksikleri tamamlayın.** Canlı destek aracının görsellerini başka bir alan adından yüklediğini ya da analitik kodunun ek bir bağlantı adresi kullandığını genellikle bu aşamada fark edersiniz.
4. **Engelleme moduna geçin.** Bir iki hafta boyunca yeni ihlal görmediğinizde başlığın adını `Content-Security-Policy` olarak değiştirin.
5. **Değişiklik sürecine bağlayın.** Siteye yeni bir üçüncü taraf araç eklendiğinde CSP’nin de güncellenmesi gerektiğini ekibinize not edin; aksi halde yeni araç sessizce çalışmaz.

Bu yöntemle CSP, siteyi bozmadan ve kimsenin işini durdurmadan devreye alınır. En önemli kazanım, sitede bir eklenti açığı oluştuğunda bile yabancı bir alan adından betik yüklenmesinin engellenmesidir.

## Sonuç

Güvenlik başlıkları, saldırganların işini zorlaştıran ve çoğu zaman bir öğleden sonrada eklenebilen bir savunma katmanıdır. Önemli olan acele etmeden, sırayla ve her adımda test ederek ilerlemektir. E-posta tarafındaki güvenliği de ihmal etmemek için [SPF, DKIM ve DMARC rehberimize](/blog/spf-dkim-dmarc-e-posta-dogrulama-rehberi/) göz atabilirsiniz.
