HTTP Güvenlik Başlıkları: Web Uygulamalarında Güvenlik Yapılandırması

12 Ekim 2026 · 11 dk okuma

HTTP güvenlik başlıkları, bir web sunucusunun tarayıcıya gönderdiği yanıtın üstbilgi bölümünde yer alan ve tarayıcının sayfayı nasıl işleyeceğini, hangi kaynaklardan veri yükleyebileceğini ve hangi iletişim kurallarına uyacağını tanımlayan yapılandırma direktifleridir. Bu başlıklar uygulama kodunun işlevini değiştirmez; tarayıcı tarafında uygulanan ek bir güvenlik katmanı oluşturur. Bu nedenle içerik yönetim sistemleri, uygulama çatıları veya sunucu yazılımları ne olursa olsun, güvenlik başlıkları taşıma katmanında tanımlanabilir ve bağımsız olarak denetlenebilir. Başlıkların temel amacı, tarayıcının varsayılan ve çoğu durumda esnek olan davranışını, uygulamanın gerçek ihtiyaçları ölçüsünde sıkılaştırmaktır.

HTTP Güvenlik Başlıklarının İşlevi ve Kapsamı

Bir tarayıcı, sunucudan gelen yanıtı işlerken belirli varsayımlarla hareket eder. Örneğin, bir sayfaya eklenen betiklerin nereden yüklendiğini, sayfanın başka bir çerçeve içinde gösterilip gösterilemeyeceğini veya hangi iletişim protokolünün kullanılacağını varsayılan kurallara göre değerlendirir. Güvenlik başlıkları, bu varsayımları uygulama sahibinin belirlediği sınırlar içine alır.

Söz konusu başlıklar pek çok saldırı sınıfına karşı savunma derinliği sağlar. Siteler arası betik çalıştırma (XSS), tıklama hırsızlığı (clickjacking), içerik enjeksiyonu, protokol düşürme ve MIME türü karışıklığı bunlar arasında sayılabilir. Bu başlıklar tek başına eksiksiz bir koruma oluşturmaz; güvenli kodlama, girdi doğrulama, kimlik doğrulama ve yetkilendirme mekanizmalarıyla birlikte değerlendirilmesi gereken bir katmandır.

Başlıkların önemli bir özelliği, sunucu tarafında merkezî olarak yönetilebilmesidir. Böylece uygulamanın farklı bölümlerinde tutarlı bir politika uygulanabilir ve yeni sürüm dağıtımlarında politika değişiklikleri tek noktadan yönetilebilir.

Content Security Policy (CSP)

Content Security Policy, bir sayfanın hangi kaynaklardan içerik yükleyebileceğini tanımlayan bir politikadır. Tarayıcıya, betik, stil, görsel, yazı tipi, çerçeve ve medya gibi kaynakların hangi adreslerden alınabileceği bildirilir. Politika dışında kalan kaynaklar tarayıcı tarafından engellenir. Bu yaklaşım, enjekte edilmiş bir betiğin çalıştırılmasını veya harici bir kaynaktan veri sızdırılmasını zorlaştırır.

CSP, uygulama içinde satır içi (inline) betik ve stil kullanımını da sınırlandırabilir. Satır içi kodun engellenmesi, XSS saldırılarının en sık kullandığı vektörlerden birini devre dışı bırakır. Politika, yanıt üstbilgisinde veya sayfa içindeki bir meta etiketiyle tanımlanabilir; ancak meta etiketiyle tanımlanan politikanın kapsamı ve uygulanabilirliği üstbilgiye göre daha dardır.

CSP Direktifleri ve Kaynak Tanımları

Bir CSP politikası, noktalı virgülle ayrılmış direktiflerden oluşur. Her direktif, hangi kaynak türünün denetlendiğini ve bu kaynağa hangi adreslerin izinli olduğunu belirtir. Yaygın kullanılan direktifler şunlardır:

  • default-src: Diğer direktifler için varsayılan kaynak tanımını belirler.
  • script-src: Yüklenebilecek betik kaynaklarını sınırlandırır.
  • style-src: Stil dosyalarının ve satır içi stillerin kaynağını tanımlar.
  • img-src: Görsel kaynaklarının hangi adreslerden alınabileceğini belirtir.
  • connect-src: Betiklerin yapabileceği ağ bağlantılarının hedefini kısıtlar.
  • frame-ancestors: Sayfanın hangi üst çerçevelerde gösterilebileceğini tanımlar.
  • base-uri: Sayfadaki temel adres etiketinin hangi değerleri alabileceğini sınırlar.
  • form-action: Form verilerinin hangi adreslere gönderilebileceğini belirtir.

Nonce ve Hash Tabanlı Yaklaşımlar

Satır içi betiklerin tamamen yasaklanması bazı uygulamalarda işlev kaybına yol açabilir. Bu durumda rastgele üretilen bir nonce değeri veya betiğin içeriğinden hesaplanan bir hash, politika içinde belirtilerek yalnızca ilgili kodun çalışmasına izin verilebilir. Nonce değerinin her yanıtta yeniden üretilmesi, saldırganın önceden tahmin edebileceği sabit bir değerin kullanılmasını önler.

Politika devreye alınırken doğrudan zorlayıcı moda geçmek yerine, ihlalleri yalnızca raporlayan bir mod ile başlanabilir. Bu modda tarayıcı, politikaya aykırı girişimleri engellemek yerine belirlenen bir raporlama adresine bildirir. Elde edilen raporlar incelenerek politika, uygulamanın gerçek kaynak ihtiyaçlarına göre daraltılabilir.

Strict-Transport-Security (HSTS)

Strict-Transport-Security başlığı, tarayıcıya belirli bir alan adına yalnızca güvenli protokol üzerinden bağlanması gerektiğini bildirir. Başlık, bir güvenli bağlantı üzerinden alındıktan sonra tarayıcı, belirtilen süre boyunca aynı alan adına yapılacak tüm istekleri güvenli protokole yönlendirir. Böylece kullanıcı adres çubuğuna şifresiz bir adres yazsa dahi bağlantı güvenli kanaldan kurulur.

Bu mekanizma, ağ üzerinde araya giren bir aktörün şifresiz bir bağlantıyı taklit etmesini ve oturum bilgilerini ele geçirmesini zorlaştırır. HSTS, yalnızca güvenli protokol üzerinden sunulan yanıtlarda işlenir; şifresiz bir yanıtla gönderilen başlık tarayıcı tarafından dikkate alınmaz.

HSTS Süresi ve Alt Alan Adları

Başlığın max-age parametresi, tarayıcının bu kuralı kaç saniye boyunca uygulayacağını belirtir. includeSubDomains parametresi, kuralın alt alan adlarına da uygulanmasını sağlar. preload parametresi ise alan adının tarayıcıların yerleşik listelerine dahil edilmesi sürecine yöneliktir; listeye dahil edilen alan adları için tarayıcı, ilk bağlantıdan itibaren güvenli protokolü zorunlu tutar. Süre değerinin kademeli olarak artırılması, yapılandırma kaynaklı erişim sorunlarının erken aşamada görülmesine imkân tanır.

X-Frame-Options ve Çerçeveleme Koruması

X-Frame-Options başlığı, bir sayfanın çerçeve veya nesne etiketi içinde gösterilip gösterilemeyeceğini denetler. deny değeri sayfanın hiçbir çerçevede gösterilmesine izin vermez; sameorigin değeri yalnızca aynı kaynak içindeki çerçevelemeye izin verir. Bu başlık, kullanıcıyı görünmez bir çerçeve katmanı üzerinden yanıltıcı tıklamaya yönlendiren clickjacking saldırılarına karşı koruma sağlar.

Modern tarayıcılarda benzer bir koruma, CSP içindeki frame-ancestors direktifiyle de tanımlanabilir. İki mekanizmanın birlikte kullanılması, farklı tarayıcı sürümlerinde tutarlı bir koruma seviyesi elde edilmesine yardımcı olur.

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

X-Content-Type-Options başlığı, tarayıcının bir kaynağın içerik türünü tahmin etmeye çalışmasını engeller. nosniff değeri kullanıldığında tarayıcı, sunucunun bildirdiği içerik türüne uyar ve kaynağı farklı bir türde yorumlamaz. Bu denetim, içerik türü belirsiz bir dosyanın betik olarak çalıştırılması gibi durumların önüne geçer.

Bu başlık özellikle kullanıcı tarafından yüklenen dosyaların sunulduğu uygulamalarda önem taşır. Sunucunun doğru içerik türünü bildirmesi ve bu türün değiştirilmemesi, tarayıcı tarafındaki yorumlama farklılıklarından doğabilecek riskleri azaltır.

Referrer-Policy ile Yönlendiren Bilgisinin Sınırlandırılması

Referrer-Policy başlığı, bir bağlantıya tıklandığında hedef sunucuya gönderilen yönlendiren bilgisinin kapsamını belirler. Bu bilgi, kullanıcının hangi sayfadan geldiğini gösteren adres verisini içerir ve varsayılan olarak tam adres iletilebilir. Politika tanımlanmadığında, adres içindeki sorgu parametreleri veya yol bilgileri üçüncü taraflarla paylaşılabilir.

strict-origin-when-cross-origin gibi bir değer, aynı kaynak içindeki isteklerde tam adresin, farklı kaynaklara yapılan isteklerde ise yalnızca kaynak bilgisinin iletilmesini sağlar. no-referrer değeri ise yönlendiren bilgisinin hiç gönderilmemesini sağlar. Politika seçimi, analitik ölçümleme ihtiyaçları ile gizlilik gereksinimleri arasındaki deng eye göre belirlenir.

Permissions-Policy ile Tarayıcı API Erişiminin Kısıtlanması

Permissions-Policy başlığı, sayfanın ve sayfa içindeki çerçevelerin hangi tarayıcı özelliklerine erişebileceğini tanımlar. Konum, kamera, mikrofon, bildirim, tam ekran ve benzeri yetenekler bu başlık üzerinden kısıtlanabilir. Kullanılmayan özelliklerin kapatılması, hem saldırı yüzeyini daraltır hem de üçüncü taraf içeriklerin gereksiz yetkilere erişmesini önler.

Politika, özellik adı ve izin verilen kaynak listesi biçiminde tanımlanır. Boş parantez, ilgili özelliğin tamamen devre dışı bırakıldığını gösterir. Sayfanın işlevi için gerekli olmayan her yeteneğin kapatılması, en az yetki ilkesinin tarayıcı tarafındaki karşılığı olarak değerlendirilebilir.

Kaynak İzolasyonu: COOP, COEP ve CORP

Cross-Origin-Opener-Policy başlığı, sayfanın farklı bir kaynakla açılan pencere bağlamıyla ilişkisini denetler. same-origin değeri, sayfanın başka bir kaynakla pencere nesnesi üzerinden etkileşime geçmesini engeller. Cross-Origin-Embedder-Policy başlığı, sayfaya gömülebilecek kaynakların açıkça izin vermesi koşulunu getirir. Cross-Origin-Resource-Policy başlığı ise bir kaynağın hangi kaynaklardan yüklenebileceğini sunucu tarafında tanımlar.

Bu başlıklar, farklı kaynaklar arası veri sızıntısı senaryolarının sınırlandırılmasına katkı sağlar. Aynı zamanda belirli tarayıcı API'lerinin kullanılabilmesi için gereken izolasyon koşullarının sağlanmasında rol oynar. Yapılandırma sırasında gömülü içeriklerin ve harici kaynakların bu politikalarla uyumlu olup olmadığı ayrıca değerlendirilmelidir.

Başlıkların Tanımlandığı Katmanlar

Güvenlik başlıkları farklı katmanlarda tanımlanabilir. Web sunucusu düzeyinde statik yapılandırma dosyaları üzerinden tanımlama yapılabilir. Uygulama sunucusu veya uygulama çatısı düzeyinde, her yanıt üretildiğinde başlıklar dinamik olarak eklenebilir. Ters vekil sunucu veya içerik dağıtım ağı katmanında ise başlıklar merkezî olarak eklenebilir veya mevcut başlıklar düzenlenebilir.

Aynı başlığın birden fazla katmanda tanımlanması, yinelenen başlık oluşumuna ve tarayıcının beklenmeyen bir politikayı uygulamasına yol açabilir. Bu nedenle başlıkların hangi katmanda yönetileceği belirlenmeli ve yapılandırma tek bir sorumlu noktada tutulmalıdır. Dinamik olarak üretilen başlıklarda ise değerlerin kullanıcı girdisinden bağımsız olması gerekir.

Yapılandırmanın Doğrulanması ve Sürdürülmesi

Tanımlanan başlıkların gerçekten gönderildiğini doğrulamak için tarayıcı geliştirici araçlarındaki ağ sekmesi kullanılabilir. İlgili yanıtın üstbilgi bölümü incelenerek başlık adları ve değerleri görülebilir. Komut satırı araçlarıyla yapılan istekler de yanıt üstbilgilerinin görüntülenmesini sağlar. Bu doğrulama, yapılandırmanın farklı sayfa türlerinde ve farklı yanıt kodlarında tutarlı biçimde uygulandığını göstermek açısından önemlidir.

Başlık politikaları, uygulamanın gelişimiyle birlikte güncellenmesi gereken yapılandırmalardır. Yeni bir harici kaynak eklendiğinde CSP politikasının gözden geçirilmesi, kullanılmayan bir özellik kaldırıldığında ilgili izinlerin daraltılması gerekir. Politika ihlallerinin düzenli olarak izlenmesi, hem yapılandırma hatalarının erken tespitine hem de olası saldırı girişimlerinin görülmesine katkı sağlar.

Sonuç olarak HTTP güvenlik başlıkları, web uygulamalarının tarayıcı tarafındaki davranışını denetleyen, taşıma katmanında tanımlanan ve bağımsız olarak doğrulanabilen bir güvenlik katmanıdır. CSP, HSTS, X-Frame-Options, X-Content-Type-Options, Referrer-Policy, Permissions-Policy ile kaynak izolasyon başlıklarının uygulamanın gerçek ihtiyaçlarına göre yapılandırılması, savunma derinliği yaklaşımının ayrılmaz bir parçasıdır.