HSTS
Eş anlamlılar: HTTP Strict Transport Security
HSTS (HTTP Strict Transport Security), tarayıcılara bir siteyi yalnızca HTTPS üzerinden ziyaret etmelerini söyleyen güvenlik başlığıdır. HTTP'ye düşürme saldırılarını önler. Preload listesi ile tarayıcıya önceden yüklü olur. Modern HTTPS yapılandırmasının zorunlu parçasıdır.
HSTS Nedir?
HSTS (HTTP Strict Transport Security), web sunucularının tarayıcılara yalnızca HTTPS üzerinden bağlanmalarını zorlayan HTTP yanıt başlığıdır. Bu başlık, RFC 6797 ile standardize edilmiştir. Bir kez HSTS başlığı ile yanıt veren site, tarayıcı tarafından belirli süre boyunca (max-age) yalnızca HTTPS üzerinden erişilebilir olarak işaretlenir.
HSTS Başlık Formatı
Strict-Transport-Security: max-age=63072000; includeSubDomains; preload
- max-age: HSTS'in geçerli olacağı süre (saniye cinsinden, önerilen 2 yıl = 63072000)
- includeSubDomains: Tüm subdomain'leri de kapsar
- preload: Tarayıcı HSTS preload listesine dahil edilmek istenir
Korunan Saldırılar
- SSL Stripping: Saldırgan kullanıcının HTTPS isteğini yakalayıp HTTP'ye indirger. HSTS ile tarayıcı zaten HTTPS'e karar vermiştir, HTTP denemez.
- Cookie Hijacking: HTTP kanalında gönderilen cookie'ler çalınabilir. HSTS bu kanalı kapatır.
- Man-in-the-Middle (MITM): Açık Wi-Fi ortamlarında trafik yakalama kolaylaşır; HSTS bu kanal açılımını engeller.
HSTS Preload Listesi
Google tarafından yönetilen bir global liste (hstspreload.org) tarayıcılar tarafından yerleşik olarak bilinir. Site bu listeye eklendiğinde, kullanıcı siteye ilk ziyaretinden bile önce HTTPS zorlaması uygulanır. Preload için kriterler:
- Geçerli SSL sertifikası
- Tüm HTTP trafiği HTTPS'e yönlendirilmeli (301)
- Tüm subdomain'ler HTTPS destekli
- HSTS başlığında max-age ≥ 31536000 (1 yıl)
- includeSubDomains mutlaka
- preload direktifi
HSTS Riskleri
- Yanlış yapılandırma: HTTPS'in çalışmadığı bir subdomain varsa HSTS o subdomain'i erişilmez yapar
- Preload'dan çıkış zor: Preload listesinden çıkmak aylarca sürebilir
- Sertifika sorunu: SSL sertifikası geçersiz olursa kullanıcı siteyi açamaz (bypass seçeneği yok)
HSTS Uygulama Adımları
- Tüm subdomain'ler dahil HTTPS'i tam kur
- HTTP → HTTPS 301 redirect'ı yap
- Önce kısa max-age (ör. 300 saniye) ile HSTS başla
- Sorun yoksa max-age'i 1 saate çıkar, sonra 1 güne, sonra 1 aya
- En az 2 hafta stabil çalışınca 1 yıl+ max-age ve preload
- hstspreload.org'a başvur
Nginx Yapılandırması
add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" always;
Apache Yapılandırması
Header always set Strict-Transport-Security "max-age=63072000; includeSubDomains; preload"
HSTS Test Araçları
- hstspreload.org — Chrome preload liste kontrol
- securityheaders.com — tüm güvenlik başlıkları kontrol
- Mozilla Observatory — kapsamlı güvenlik analizi