HTTP güvenlik başlıkları, sunucunun yanıtla tarayıcıya ilettiği güvenlik politikalarıdır. Web istek ve yanıtlarını taşıyan HTTP, TLS ile korunduğunda HTTPS olarak adlandırılır. Güvenlik başlıkları kaynak yükleme, HTTPS kullanma, içerik türünü yorumlama, tarayıcı özelliklerine erişme ve farklı sitelerle etkileşim kurma davranışlarını sınırlar.

Bu başlıklar sunucuda çalışan bir güvenlik duvarı değildir. Tarayıcı yalnız desteklediği ve geçerli biçimde yazılmış politikayı uygular; başlığın varlığı tek başına etkili koruma sağlamaz. Site yöneticisi başlık değerini, diğer politikalarla etkileşimini, sayfanın kullandığı kaynakları ve hedef tarayıcı desteğini birlikte kontrol etmelidir.

Güvenlik başlıkları yetkilendirme, güvenli kodlama, güncel yazılım, TLS yapılandırması, güvenli çerezler ve ağ katmanı korumasının yerine geçmez. Sayfa yapısını tanımlayan HTML belgelerine, uygulama yanıtlarına ve statik dosyalara aynı başlıkları ayrım yapmadan uygulamak işlevleri bozabilir.

HTTP Güvenlik Başlıkları Nasıl Çalışır?

HTTP yanıtı durum kodu, başlıklar ve varsa içerikle birlikte tarayıcıya ulaşır. Güvenlik başlıkları da bu yanıtın bir parçasıdır. Tarayıcı desteklediği başlığı ayrıştırır ve sayfayı yüklerken, alt kaynak isterken veya yeni bir gezinti başlatırken bildirilen politikayı uygular.

Politikaların kapsamı aynı değildir. CSP (Content Security Policy) çoğunlukla belirli bir belgeye ve o belgenin başlattığı işlemlere etki eder. HSTS (HTTP Strict Transport Security) ise tarayıcının alan adına yalnız HTTPS üzerinden bağlanma kararını saklamasını sağlar; trafiği kendisi şifrelemez. Sunucu adına istekleri karşılayan ters proxy, CDN veya uygulama katmanı başlık ekleyip kaldırabildiği için yalnız yapılandırma dosyasına bakmak gerçek yanıtı doğrulamaya yetmez.

Tarayıcı başlığı desteklemiyorsa veya değer geçersizse politika tamamen ya da kısmen uygulanmayabilir. Ayrıca hiçbir başlık, sunucudaki yetkilendirme hatasını, güvensiz veri işleme kodunu veya eksik güncellemeyi kendiliğinden düzeltmez.

Başlıkların Azalttığı Riskler ve Dikkat Edilecek Noktalar

Tablo, her başlığın tarayıcı davranışına etkisini, azalttığı riski ve yapılandırma sınırını birlikte gösterir.

BaşlıkSınırladığı DavranışAzalttığı RiskDikkat Edilecek Nokta
Content-Security-PolicyKaynak yükleme, kod çalıştırma, form hedefleri ve çerçevelemeİçerik enjeksiyonu ve XSS (Cross-Site Scripting) etkisiGeniş izinler korumayı zayıflatır; CSP güvenli kodlamanın yerini tutmaz.
Strict-Transport-SecuritySonraki isteklerin HTTPS kullanmasıProtokol düşürme ve güvensiz HTTP erişimiGeçerli sertifikayla çalışan HTTPS gerekir; includeSubDomains için alt alan adlarındaki web hizmetleri de hazır olmalıdır.
X-Content-Type-OptionsBildirilen içerik türünün esas alınması; yanlış türdeki komut dosyası ve stil yanıtlarının engellenmesiİçerik türü karışıklığıDoğru Content-Type başlığını üretmez; yalnız yanlış türün yorumlanmasını sınırlar.
Referrer-Policyİstekle gönderilen kaynak URL bilgisinin kapsamıYol ve sorgu bilgisinin istenmeyen aktarımıIP adresini, çerezleri veya diğer izleme sinyallerini gizlemez.
Permissions-PolicyBelge ve çerçevelerde tarayıcı özelliklerinin kullanımıKamera, mikrofon, konum ve benzeri özelliklere gereksiz erişimÖzellik desteği değişebilir; kullanıcı izni ve uygulama yetkilendirmesi ayrıdır.
X-Frame-Options veya CSP frame-ancestorsSayfanın başka bir bağlamda çerçevelenmesiClickjacking (tıklama korsanlığı)Tek başına tüm arayüz ve kimlik doğrulama saldırılarını önlemez.

Her Güvenlik Başlığının Tarayıcıdaki İşlevi

Başlık değerlerini seçerken sayfanın yüklediği kaynakları, oturum açma ve ödeme işlemlerini, gömülü içerikleri ve ihtiyaç duyduğu tarayıcı özelliklerini belirleyin.

CSP ve Kaynak Yükleme

CSP, tarayıcıya hangi kaynaklardan komut dosyası, stil, görsel, yazı tipi veya çerçeve yüklenebileceğini ve ağ bağlantılarının hangi hedeflere kurulabileceğini bildirir. Politika dışındaki bir istek ya da çalıştırma girişimi tarayıcı tarafından engellenebilir. Bu mekanizma, enjekte edilen içeriğin çalışmasını zorlaştırarak XSS gibi saldırıların etkisini azaltabilir.

CSP, güvenlik açıklarını bulan veya kodu otomatik düzelten bir araç değildir. Gereğinden geniş izinler tanımlayan bir politika başlıkta bulunsa da etkili koruma sağlamayabilir. Katı bir politika hazırlık yapılmadan etkinleştirilirse ödeme, oturum açma, analiz veya gömülü içerik gibi meşru işlevleri bozabilir. Önce Content-Security-Policy-Report-Only ile ihlalleri gözlemlemek ve ardından aşamalı geçmek bu riski azaltır.

HSTS ve HTTPS Zorlaması

Strict-Transport-Security başlığını geçerli bir HTTPS yanıtında alan tarayıcı, ilgili alan adına daha sonraki erişimlerinde HTTP isteklerini HTTPS'ye dönüştürür. HSTS kaydı etkinken kullanıcıya sertifika hatasını atlayarak devam etme seçeneği de verilmez. Böylece daha önce güvenli biçimde ziyaret edilmiş bir site için güvensiz bağlantıya dönme riski azaltılır.

Tarayıcı politikayı henüz bilmiyorsa HSTS ilk HTTP bağlantısını tek başına korumaz. Tarayıcının yerleşik listesine ekleme anlamındaki preload ayrı bir karardır ve geri alınması aylar sürebilir. Özellikle includeSubDomains direktifini eklemeden önce alt alan adlarındaki web hizmetlerinin geçerli sertifikayla HTTPS sunduğunu doğrulayın.

X-Content-Type-Options ve Tür Denetimi

X-Content-Type-Options başlığındaki nosniff değeri, tarayıcının yanıt içeriğine bakıp tür tahmini yapmasını engeller; bildirilen Content-Type değeri esas alınır. Komut dosyası veya stil isteğinde yanıt beklenen türü taşımıyorsa tarayıcı yüklemeyi engeller. Örneğin text/plain olarak sunulan bir belge, içinde HTML kodu bulunsa bile HTML sayfası olarak yorumlanmaz.

Bu başlık sunucunun yanlış içerik türünü düzeltmez. Uygulama yine her dosya için doğru Content-Type değerini göndermeli, kullanıcı yüklemelerini uygun şekilde ayırmalı ve doğrudan erişim davranışını kontrol etmelidir.

Referrer-Policy ve Bilgi Aktarımı

Referrer-Policy, bir bağlantı, yönlendirme veya alt kaynak isteği sırasında hedefe kaynak sayfa hakkında ne kadar URL bilgisi gönderileceğini belirler. Politikaya göre kullanıcı bilgisi ve # işaretinden sonraki parça çıkarılmış adres, yalnız köken bilgisi ya da hiçbir kaynak adresi gönderilebilir. HTTP ve HTTPS adreslerinde origin (köken), protokol, sunucu adı ve port birleşimidir; aynı alan adında farklı protokol veya port kullanılması da farklı köken oluşturur. Bu kontrol, URL yolunda ya da sorgu bölümünde bulunan hassas ayrıntıların başka bir siteye taşınma olasılığını azaltır.

Referrer bilgisini sınırlamak anonimlik sağlamaz. Hedef sunucu istemcinin IP adresini ve isteğin kendisine ait diğer ağ verilerini görmeye devam edebilir; ayrıca ziyaretçi ölçümü ve siteler arasında oturum açma işlemleri seçilen politikadan etkilenebilir.

Permissions-Policy ve Tarayıcı Özellikleri

Permissions-Policy, bir belgenin ve içindeki çerçevelerin belirli tarayıcı özelliklerini kullanıp kullanamayacağını sınırlar. Kamera, mikrofon, konum, tam ekran veya sensör gibi uygulamanın ihtiyaç duymadığı yeteneklerin kapatılması, birinci taraf ve üçüncü taraf içeriğin gereksiz yeteneklere erişmesini önler.

Bu başlık kullanıcı iznini otomatik olarak vermez ve uygulamanın kendi yetkilendirme modelini değiştirmez. Belirli bir özelliğin adını, varsayılan davranışını ve tarayıcı desteğini dağıtımdan önce doğrulayın.

Tıklama Korsanlığına Karşı Çerçeveleme Kısıtları

Tıklama korsanlığı saldırısında bir sayfa, başka bir site içinde görünmez veya yanıltıcı bir çerçeveye yerleştirilir. Kullanıcı bu nedenle farklı bir düğmeye bastığını sanarak işlem yapabilir. CSP içindeki frame-ancestors kuralı hangi üst bağlamların sayfayı çerçeveleyebileceğini tanımlar. Modern tarayıcılar uygulanan bir frame-ancestors kuralı varsa X-Frame-Options başlığını dikkate almaz; X-Frame-Options daha eski tarayıcı desteği gerekiyorsa ayrıca gönderilebilir.

frame-ancestors kuralını HTTP yanıt başlığında gönderin; HTML meta öğesine yazıldığında uygulanmaz. Bu kural default-src değerini miras almaz; yalnız default-src 'none' yazmak sayfanın çerçeveye alınmasını engellemez.

CSP’yi Raporlamadan Engellemeye Geçirme

Content-Security-Policy-Report-Only ihlalleri gözlemlemeye yarar, kaynakları engellemez. Oturum açma, ödeme ve içerik yükleme işlemlerinden rapor toplayabilirsiniz; rapor gelmemesi politikanın eksiksiz olduğunu kanıtlamaz. Engelleyen CSP’ye geçmeden komut dosyaları için script-src, stiller için style-src, ağ istekleri için connect-src ve görseller için img-src kurallarını sınayın. Sayfayı çerçeveleyebilecek kökenleri frame-ancestors, formun gönderilebileceği hedefleri form-action, göreli adreslerin temel adresini değiştirebilen HTML base öğesini ise base-uri ile ayrıca denetleyin.

CSP, komut dosyalarına nonce veya hash ile izin verebilir. Nonce, her yanıt için yeniden üretilen ve tahmin edilemeyen bir değerdir; hash ise izin verilen kodun içeriğinden hesaplanan özettir. Geniş jokerler ve bütün satır içi kodlara izin veren 'unsafe-inline' kullanımı korumayı zayıflatabilir. 'strict-dynamic' seçilirse güvenilen bir komut dosyasının sonradan yüklediği bağımlılıklar ve saldırgan denetimli dinamik adresler ayrıca incelenmelidir.

Raporları sunucuda toplamak için Reporting-Endpoints başlığında bir hedef tanımlayıp CSP içindeki report-to ile bu hedefin adını seçin. Eski report-uri direktifi kullanımdan kaldırılmıştır; report-to desteği olmayan tarayıcılar için geçiş sırasında ikisi birlikte gönderilebilir. Raporun test isteğinde gerçekten ulaştığını ve rapor hizmetinin yükü karşılayabildiğini doğrulayın.

Kökenler Arası İzolasyon: COOP, COEP ve CORP

CORS (Cross-Origin Resource Sharing), tarayıcının başka bir kökendeki yanıtı kullanıma açmasına izin veren mekanizmadır. İsteklerde cors modu bu izin denetimini uygular; no-cors modu ise yanıtı komut dosyasına serbestçe okuma hakkı vermeden belirli kaynak yüklemelerine izin verir.

Cross-Origin-Opener-Policy (COOP), sayfa ile onu açan ya da onun açtığı pencerelerin aynı tarama bağlamı grubunu paylaşıp paylaşamayacağını belirler. Cross-Origin-Embedder-Policy (COEP), başka kökenlerden gelen kaynakların belgeye hangi koşullarda yüklenebileceğini düzenler. Kaynağın kendi yanıtındaki Cross-Origin-Resource-Policy (CORP) ise no-cors modundaki yüklemelerin hangi köken veya site bağlamlarına açık olduğunu belirtir.

COEP’nin require-corp değerinde başka kökenden kaynak yüklemek için isteğin CORS denetiminden geçmesi veya no-cors modundaki isteğin uygun CORP yanıtıyla izin alması gerekir. credentialless seçeneğinde ise no-cors modunda istenen başka kökendeki kaynaklar, CORP izni olmasa da kimlik bilgileri gönderilmeden yüklenebilir. Bu durumda çerezler isteğe eklenmez ve yanıttaki çerezler işlenmez.

Cross-Origin-Opener-Policy: same-origin ile uyumlu COEP politikası, JavaScript iş parçacıkları arasında bellek paylaşan SharedArrayBuffer gibi özellikler için gereken kökenler arası izolasyonu sağlayabilir. Sayfa güvenli bir bağlamda açılmalı ve Permissions-Policy içindeki cross-origin-isolated kuralı bu özelliği engellememelidir. Bu ayarlar üçüncü taraf kaynakları, ödeme pencerelerini veya oturum açma pencereleriyle iletişimi bozabileceği için uygulamanın kullandığı bütün bağımlılıklarla test edilmelidir.

Uygulama Arayüzü Yanıtlarında Başlık Seçimi

Tarayıcıdan çağrılan bir API’de gerekli başlıklar yanıt türüne ve istemci modeline göre seçilir. Veri alışverişinde kullanılan JSON yanıtında doğru Content-Type, hassas veride uygun Cache-Control, tür tahminini engellemek için X-Content-Type-Options: nosniff ve gerekiyorsa CORS politikası birlikte değerlendirilir. HTML’ye özgü CSP direktiflerini her JSON yanıtına kopyalamak çoğu durumda anlamlı değildir.

CORS bir kimlik doğrulama sistemi değildir; yalnız tarayıcının yanıtı başka bir kökenle paylaşıp paylaşamayacağını belirler. İzin verilen kökenler dinamik yansıtılıyorsa doğrulanmış bir izin listesi ve uygun Vary: Origin gerekir; kimlik bilgili istekte joker köken kullanılamaz. Sunucu tarafı yetkilendirme ve CSRF (Cross-Site Request Forgery) savunması ayrı kontroller olarak kalır.

Clear-Site-Data, Önbellek ve Çerez Kontrolleri

Clear-Site-Data, güvenli bağlamda gelen yanıtla tarayıcıdan önbellek, çerez veya site depolamasını temizlemesini isteyebilir. Desteklenen executionContexts direktifi ise ilgili açık sayfaların yeniden yüklenmesini ister. Oturum kapatırken site verisini temizlemek yararlı olabilir; ancak kullanıcı verisini veya çevrimdışı işlevleri beklenmedik biçimde kaldırabilir. Özellikle cookies seçeneği aynı kayıtlı alan adının alt alanlarındaki çerezleri de etkileyebilir. Destek tarayıcı ve direktife göre değişir; bu işlem diskteki bütün kopyaların güvenli biçimde silindiğini garanti etmez.

Cache-Control: no-store hassas yanıtın önbellekte saklanmasını sınırlar fakat daha önce kaydedilmiş site verisini topluca temizlemez. Secure, HttpOnly ve SameSite ise ayrı başlıklar değil, Set-Cookie başlığındaki çerez öznitelikleridir. Secure çerezin güvenli bağlantıyla gönderilmesini, HttpOnly komut dosyalarının çereze doğrudan erişememesini, SameSite ise siteler arası isteklerde gönderim koşullarını belirler. Uygulama oturum kapatma isteğini CSRF’ye karşı korumalı ve veri temizlemeyi kullanıcının başlattığı açık bir işlemle ilişkilendirmelidir.

Eski veya Artık Önerilmeyen Güvenlik Başlıkları

X-XSS-Protection, eski tarayıcılardaki yansıtılmış XSS filtrelerini yönetirdi; güncel XSS savunmasının temeli sayılmamalıdır. Güvenli çıktı kodlama, doğru veri işleme ve dikkatle tasarlanmış CSP daha güncel kontrollerdir. Eski Feature-Policy başlığının yerini farklı sözdizimine sahip Permissions-Policy almıştır.

Public-Key-Pins başlığıyla uygulanan HPKP (HTTP Public Key Pinning), kabul edilecek sertifika anahtarlarını sabitler; yanlış sabitlemenin siteyi uzun süre erişilemez bırakabilmesi nedeniyle güncel tarayıcı dağıtımı için kullanılmamalıdır. Expect-CT de güncel genel amaçlı öneri değildir; CT (Certificate Transparency) denetimlerini tarayıcılar ve sertifika ekosistemi bu başlıktan bağımsız yürütür. Server veya X-Powered-By bilgisini azaltmak gereksiz ayrıntı sızıntısını sınırlayabilir, fakat bir yazılım açığını kapatmaz.

Güvenlik Başlıklarını Aşamalı Olarak Yayına Alma

Başlıkları doğrudan üretim ortamına topluca eklemek yerine uygulamanın bağımlılıklarını ve hata olasılıklarını dikkate alarak aşamalı biçimde devreye alın.

  1. HTML sayfaları, yönlendirmeler, hata yanıtları ve statik kaynaklarda gerçekten gönderilen başlıkları envanterleyin.
  2. Her başlığı belirli bir risk ve tarayıcı davranışıyla eşleştirin; ihtiyaç duyulmayan özellikleri ve üçüncü taraf kaynakları belirleyin.
  3. CSP gibi kırılma riski yüksek politikalarda önce raporlama veya deneme yaklaşımı kullanın; HSTS için HTTPS ve alt alan adı hazırlığını doğrulayın.
  4. Oturum açma, ödeme, form, dosya yükleme ve gömülü içerik işlemlerini hedef tarayıcılarda test edin.
  5. CDN, sunucu veya uygulama güncellemelerinden sonra yanıtları yeniden kontrol edin ve politika ihlallerini düzenli olarak inceleyin.

Tarayıcının geliştirici araçlarında Ağ bölümünü açıp inceleyeceğiniz sayfa veya kaynak isteğini seçin; yanıt başlıklarındaki gerçek değerleri okuyun. Konsoldaki politika ihlallerini ve engellenen istekleri de kontrol edin. Bir başlığın listede bulunması, ilgili davranışın bütün sayfalarda beklendiği gibi çalıştığını kanıtlamaz.