HSTS nedir?
HSTS (HTTP Strict Transport Security), tarayıcılara bir web sitesiyle yalnızca HTTPS üzerinden, hiçbir zaman HTTP üzerinden iletişim kurmalarını söyleyen bir web güvenlik mekanizmasıdır. Tarayıcı bir HSTS başlığı gördüğünde, kullanıcı açıkça http:// yazsa bile gelecekteki tüm istekleri otomatik olarak HTTPS'ye yükseltir ve düz HTTP üzerinden bağlantı kurulmasını reddeder.
HSTS neden önemlidir?
Geçerli bir SSL sertifikası olsa bile güvenlik açıkları bulunabilir:
SSL Stripping saldırısı
1. Kullanıcı "example.com" yazar (https:// yoktur)
2. Saldırgan ilk HTTP isteğini ele geçirir
3. Saldırgan HTTPS'ye proxy'ler ve kullanıcıya HTTP sunar
4. Kullanıcı güvende olduğunu düşünür, ancak saldırgan tüm verileri görür
HSTS, tarayıcıların bu ilk HTTP isteğini hiçbir zaman göndermemesini sağlayarak bunu önler.
HSTS'nin faydaları
- Protokol düşürme saldırılarını önler: HTTP'ye geri dönüş mümkün değildir
- Kullanıcı yer imlerini korur: Eski HTTP yer imleri bile HTTPS olur
- Karma içeriği ortadan kaldırır: Alt kaynaklar da HTTPS'ye zorlanır
- Performansı artırır: HTTP→HTTPS yönlendirmelerine gerek kalmaz
HSTS başlık sözdizimi
Strict-Transport-Security: max-age=31536000; includeSubDomains; preload
Yönergeler
| Yönerge | Açıklama |
|---|---|
| max-age | HSTS'nin hatırlanacağı saniye sayısı (31536000 = 1 yıl) |
| includeSubDomains | HSTS'yi tüm alt alan adlarına uygular |
| preload | Tarayıcının önyükleme listesine dahil edilmesini kabul eder |
HSTS uygulama
Nginx
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;
Apache
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"
Cloudflare
SSL/TLS → Edge Certificates → HTTP Strict Transport Security bölümünde etkinleştirin
Express.js
const helmet = require('helmet');
app.use(helmet.hsts({
maxAge: 31536000,
includeSubDomains: true,
preload: true
}));
HSTS önyükleme listesi
HSTS önyükleme listesi, tarayıcılarda sabit kodlanmış ve yalnızca HTTPS üzerinden erişilmesi gereken alan adlarının listesidir. Bu liste, ilk HTTP isteğiyle ilgili açığı bile ortadan kaldırır.
Önyükleme gereksinimleri
1. Geçerli SSL sertifikası
2. Tüm HTTP trafiğini HTTPS'ye yönlendirme
3. Şu özelliklere sahip HSTS başlığı:
- En az 31536000 max-age (1 yıl)
- includeSubDomains yönergesi
- preload yönergesi
4. Tüm alt alan adları HTTPS'yi desteklemelidir
Önyükleme listesine gönderme
1. Gereksinimleri doğrulayın: Kontrol için hstspreload.org'u kullanın
2. Alan adını gönderin: Alan adını hstspreload.org'a girin
3. Dahil edilmeyi bekleyin: Tarayıcı güncellemeleri haftalar veya aylar sürebilir
Önyükleme uyarıları
Önyükleme pratikte kalıcıdır. Listeden çıkarılmak aylar sürer ve tarayıcı güncellemeleri gerektirir. Tüm alt alan adlarının süresiz olarak HTTPS'yi destekleyeceğinden emin değilseniz önyükleme yapmayın.HSTS'yi kontrol etme
Tarayıcı Geliştirici Araçları:1. Geliştirici Araçları → Network sekmesini açın
2. Siteyi yükleyin
3. Yanıt başlıklarında Strict-Transport-Security'yi kontrol edin
curl kullanarak:curl -I https://example.com | grep -i strict
DomScan kullanarak:
curl "https://domscan.net/v1/health?domain=example.com"
# Reports hasHSTS in security details
Önyükleme durumu:
Bir alan adının önyüklenip önyüklenmediğini görmek için hstspreload.org'u kontrol edin.
HSTS dağıtım stratejisi
Aşama 1: Kısa max-age
Test etmek için kısa bir max-age ile başlayın:
Strict-Transport-Security: max-age=300
Bir şey bozulursa kullanıcıların önbelleğinde yalnızca 5 dakika kalır.
Aşama 2: Süreyi artırma
HTTPS'nin her yerde çalıştığını doğruladıktan sonra:
Strict-Transport-Security: max-age=86400
Aşama 3: Alt alan adlarını ekleme
Tüm alt alan adları HTTPS'yi desteklediğinde:
Strict-Transport-Security: max-age=2592000; includeSubDomains
Aşama 4: Tam dağıtım ve önyükleme
Aylar süren kararlı çalışmanın ardından:
Strict-Transport-Security: max-age=31536000; includeSubDomains; preload
Ardından önyükleme listesine gönderin.
Yaygın HSTS sorunları
HTTPS'si olmayan alt alan adı: includeSubDomains bu alt alan adını kullanılamaz hâle getirir Geliştirme ortamları: Üretimde önbelleğe alınan HSTS yerel geliştirmeyi bozar CDN/proxy başlıkları: HSTS başlığının aracı sistemler tarafından kaldırılmadığından emin olun Karma içerik: Tüm kaynaklar HTTPS olmalıdır; HSTS gömülü HTTP kaynaklarını düzeltmezHSTS, hassas veriler işleyen tüm web siteleri için temel gerekliliktir ve tüm HTTPS siteleri için önemle tavsiye edilir.