HTTP Güvenlik Başlıkları (HSTS, CSP, X-Frame-Options) Rehberi
HTTP Güvenlik Başlıkları (HSTS, CSP, X-Frame-Options) Rehberi
Günümüzün siber dünyasında, sunucu güvenliği sadece güçlü şifreler ve güncel yazılımlarla sınırlı kalmıyor. Web tarayıcılarıyla sunucu arasında giden her HTTP cevabı, sitenizi saldırılardan koruyacak kritik yönergeler içeriyor olabilir. İşte HTTP güvenlik başlıkları devreye giriyor: Birkaç satır ekleme ile clickjacking’den içerik enjeksiyonuna, protokol kaçakçılığından man‑in‑the‑middle saldırılarına kadar pek çok tehdidi önleyebilirsiniz.
1. HTTP Güvenlik Başlıkları Neden Önemli?
Tarayıcılar, bir web sayfasını yüklerken sunucudan dönen HTTP başlıklarını okur ve bazılarını ek güvenlik kararları almak için kullanır. Eksik veya yanlış yapılandırılmış başlıklar; kullanıcı tarayıcısının kötü amaçlı içeriği çalıştırmasına, oturum çalma (session hijacking) veya şifreli trafiğin kötüye kullanılmasına zemin hazırlayabilir. Aşağıda ele alacağımız üç ana başlık, modern web uygulaması güvenliğinin omurgasını oluşturuyor.
2. HSTS (HTTP Strict Transport Security)
2.1 HSTS Nedir?
HSTS, tarayıcıya “bu siteye sadece HTTPS üzerinden bağlan” talimatı veren bir başlıktır. Böylece kullanıcı “http://” ile başlasa bile otomatik olarak “https://” sürümüne yönlendirilir ve ortadaki saldırganların (MITM) sertifika manipülasyonu yapma şansı kalmaz.
2.2 Temel Parametreler
- max-age: Başlığın geçerli kalacağı süre (saniye cinsinden). Örneğin max-age=31536000 bir yılı ifade eder.
- includeSubDomains: Tüm alt alan adları da HTTPS’e zorlar.
- preload: Siteyi tarayıcıların HSTS preload listesine eklemeye hazırlar (önceden tanımlı HSTS listesi).
2.3 Örnek Konfigürasyonlar
Nginx
nginx
KopyalaDüzenle
add_header Strict-Transport-Security “max-age=31536000; includeSubDomains; preload” always;
Apache
apache
KopyalaDüzenle
<IfModule mod_headers.c>
Header always set Strict-Transport-Security “max-age=31536000; includeSubDomains; preload”
</IfModule>
2.4 Dikkat Edilmesi Gerekenler
- Bir kez etkinleştirip preload listesine gönderdiğinizde, geri dönüşü zor olabilir. Test ortamında max-age=60 ile denemeler yapın.
- SSL sertifikanızın her zaman güncel ve geçerli olduğundan emin olun; HSTS aktifken sertifika hatası yaşayan kullanıcı siteye hiç ulaşamaz.
3. CSP (Content Security Policy)
3.1 CSP Nedir ve Ne Sağlar?
CSP, tarayıcıya hangi kaynaklardan (JavaScript, CSS, resim vs.) içerik yükleyebileceğini bildirerek script enjeksiyonu, XSS (Cross‑Site Scripting) ve data injection saldırılarını büyük ölçüde engeller. Başlığın mantığı “default olarak hiçbir şey çalıştırma, sadece aşağıda izin verdiğim kaynaklara izin ver” şeklindedir.
3.2 Yaygın Directive’ler
- default-src: Tüm kaynak türleri için temel izin kümesi.
- script-src: JavaScript dosyaları.
- style-src: Stil dosyaları ve inline stiller.
- img-src: Görseller.
- connect-src: AJAX/WebSocket isteği yapılan uç noktalar.
- font-src: Özel font dosyaları.
- frame-ancestors: Bu sayfanın hangi sitelerde iframe içinde yüklenebileceği.
- report-uri veya report-to: İhlal tespit edildiğinde hangi URL’ye rapor gönderileceği.
3.3 Örnek CSP Başlığı
Aşağıdaki örnek; kendi domain’inizden ve güvenilir CDN’lerden JS, CSS ve görsel yüklemeye, yalnızca HTTPS üzerinden bağlantıya ve kendi domain’in iframe’e alınmasına izin veriyor. İhlali /csp-report yoluna JSON formatında raporlayacak.
nginx
KopyalaDüzenle
add_header Content-Security-Policy “
default-src ‘none’;
script-src ‘self’ https://cdn.example.com;
style-src ‘self’ ‘unsafe-inline’ https://cdn.example.com;
img-src ‘self’ data:;
connect-src ‘self’ https:;
font-src ‘self’ https://fonts.gstatic.com;
frame-ancestors ‘self’;
report-uri /csp-report;
” always;
CSP Uygularken İpuçları
- Raporlama Modu (‘report-only’): Önce ihlalleri görmek için Content-Security-Policy-Report-Only başlığıyla çalışın.
- ‘unsafe-inline’ ve ‘unsafe-eval’ Kullanımını Azaltın: Inline JavaScript’in veya eval() kullanımının önüne geçmek, enjeksiyon riskini düşürür.
- Nonce veya Hash Mekanizmaları: Dinamik script’ler için nonce-… veya hash kullanarak sadece imzalanmış kodu çalıştırın.
4. X-Frame-Options
4.1 X-Frame-Options Ne İşe Yarıyor?
Clickjacking adı verilen yöntemle saldırganlar, kullanıcının aslında ziyaret ettiği sayfa yerine görünmez bir iframe’e yerleştirilmiş sahte bir sayfa üzerinden işlemler yaptırabilir. X-Frame-Options, sayfanızın iframe içinde nasıl davranacağını kontrol eder.
4.2 Direktif Seçenekleri
- DENY: Hiçbir durumda iframe’e izin verme.
- SAMEORIGIN: Sadece kendi domain’inizden iframe’e alınabilir.
- ALLOW-FROM uri: Belirttiğiniz URI’den iframe olarak yüklemeye izin ver.
4.3 Örnek Yapılandırma
Nginx
nginx
KopyalaDüzenle
add_header X-Frame-Options “SAMEORIGIN” always;
Apache
apache
KopyalaDüzenle
<IfModule mod_headers.c>
Header always set X-Frame-Options “DENY”
</IfModule>
5. Diğer Faydalı Güvenlik Başlıkları
5.1 X-Content-Type-Options
Tarayıcının içerik türlerini otomatik tespit etmeye çalışmasını engeller; yalnızca sunucu tarafından belirtilen Content-Type’ı kabul eder:
nginx
KopyalaDüzenle
add_header X-Content-Type-Options “nosniff” always;
5.2 Referrer-Policy
Kullanıcının önceki sayfa bilgisini (referrer) ne kadar paylaşacağını kontrol eder:
nginx
KopyalaDüzenle
add_header Referrer-Policy “strict-origin-when-cross-origin” always;
5.3 X-XSS-Protection (Eski Tarayıcılar İçin)
Bazı eski tarayıcılarda yerleşik XSS filtresini kontrol eder:
nginx
KopyalaDüzenle
add_header X-XSS-Protection “1; mode=block” always;
6. Başlıkları Test Etme ve Doğrulama
- curl ile Hızlı Kontrol
bash
KopyalaDüzenle
curl -I https://ornek-site.com
Dönen başlıklarda Strict-Transport-Security, Content-Security-Policy ve X-Frame-Options satırlarını görebilirsin.
- Online Araçlar
- Tarayıcı Konsolunda Hata/İhlal Uyarıları
CSP ihlallerini geliştirici araçlarının “Console” sekmesinde görebilirsin.
7. Sunucuya Entegrasyon ve Otomasyon
- Ansible/Vagrant/Chef/Puppet gibi araçlarla konfigürasyon dosyalarını kodla yönet, her yeni sunucuda aynı başlık ayarları otomatik gelsin.
- Infra as Code yaklaşımlarıyla .yaml veya .json şablonlarına bu başlıkları ekleyerek dağıtımı hızlandır.
8. Sonuç
Bu rehberde HSTS ile siteni yalnızca HTTPS’e zorlamayı, CSP ile hangi kaynakların yükleneceğini detaylıca kontrol etmeyi ve X-Frame-Options ile clickjacking saldırılarına kapıyı kapamayı öğrendin. Birkaç satır ekleme ve düzenleme ile web uygulaman, siber saldırılara karşı çok daha dirençli hale gelir. Ayrıca X-Content-Type-Options, Referrer-Policy gibi ek başlıklarla güvenlik katmanını genişletebilirsin.
Sunucu konfigürasyonlarını güncel tutmak, zaman zaman tarayıcı ve saldırı trendlerini takip ederek ayarları gözden geçirmek, uzun vadede güvenli bir altyapı sunar.