İletişim

Güvenlik Başlıkları (Security Headers) Nedir?

Kısa tanım

Güvenlik başlıkları, sunucunun HTTP yanıtlarına eklediği ve tarayıcıya sayfayı nasıl daha güvenli işleyeceğini söyleyen başlıkların ortak adıdır. Strict-Transport-Security siteyi yalnızca HTTPS ile açtırır, Content-Security-Policy hangi kaynakların yüklenebileceğini sınırlar, X-Content-Type-Options içerik türü tahminini kapatır, X-Frame-Options çerçeveye gömülmeyi engeller. XSS ve clickjacking gibi saldırıların etkisini azaltır, güvenli kodun yerini tutmaz.

Diğer adları: security headers, HTTP güvenlik başlıkları, güvenlik header'ları, HTTP security headers

HSTS, CSP, X-Frame-Options ve diğer güvenlik başlıklarını her birinin engellediği riskle birlikte gösteren katman yığını

Başlık başlık ne işe yaradıkları

Her biri bir HTTP başlığı olan bu ayarlar, tarayıcıdaki belirli bir davranışı kısıtlar. OWASP'ın HTTP Headers Cheat Sheet'indeki önerilere göre temel set şöyledir:

BaşlıkNe yapar?Tipik değer
Strict-Transport-SecurityTarayıcının siteye bir süre boyunca yalnızca HTTPS ile bağlanmasını sağlar.max-age=63072000; includeSubDomains
Content-Security-PolicyBetik, stil, görsel ve çerçevelerin hangi kaynaklardan yüklenebileceğini belirler.Siteye özel
X-Content-Type-OptionsTarayıcının dosya türünü tahmin etmesini (MIME sniffing) kapatır.nosniff
X-Frame-OptionsSayfanın başka sitelerde iframe içinde gösterilmesini engeller.DENY veya SAMEORIGIN
Referrer-PolicyBaşka sitelere giderken adresin ne kadarının paylaşılacağını sınırlar.strict-origin-when-cross-origin
Permissions-PolicyKamera, mikrofon, konum gibi tarayıcı özelliklerini kapatır veya sınırlar.camera=(), microphone=(), geolocation=()
Cross-Origin-Opener-PolicySayfayı başka kökenlerden açılan pencerelerden yalıtır.same-origin

Çerçeve kontrolünün modern karşılığı CSP'deki frame-ancestors direktifidir; X-Frame-Options eski tarayıcılar için birlikte gönderilebilir. Her ikisi de clickjacking'e karşı koruma sağlar.

Gerçek bir yanıtta nasıl görünür?

HTTP/2 200
content-type: text/html; charset=utf-8
strict-transport-security: max-age=63072000; includeSubDomains
content-security-policy: default-src 'self'; frame-ancestors 'none'
x-content-type-options: nosniff
referrer-policy: strict-origin-when-cross-origin
permissions-policy: camera=(), microphone=(), geolocation=()

Tarayıcının DevTools → Network sekmesinde ana belgeye tıklayıp yanıt başlıklarına bakarak ya da curl -I https://alanadi.com komutuyla kendi sitenizi aynı şekilde inceleyebilirsiniz.

Artık eklenmemesi gerekenler

  • X-XSS-Protection: Tarayıcıların eski XSS filtresini yönetiyordu. OWASP, bu başlığın bazı durumlarda güvenli sitelerde yeni açıklar yaratabildiğini belirtip 0 değerini veya hiç gönderilmemesini önerir. XSS'e karşı asıl araç CSP'dir.
  • Public-Key-Pins (HPKP) ve Expect-CT: Kullanımdan kaldırıldı; yapılandırmada kaldıysa temizlenmeli.
  • Server ve X-Powered-By: Güvenlik başlığı değildir ama yazılım ve sürüm bilgisini ifşa eder; kaldırılması veya genel bir değere çekilmesi önerilir.

Nereye ve nasıl eklenir?

Başlıklar uygulama çatısında (örneğin Next.js'te next.config içindeki headers()), web sunucusunda veya CDN katmanında tanımlanabilir. Tek bir yerde tanımlamak, çakışan ve tekrarlanan başlıkları önler. Nginx'te iki tuzak sık görülür: add_header varsayılan olarak yalnızca başarılı ve yönlendirme yanıtlarına eklenir, hata sayfalarında da gönderilmesi için always parametresi gerekir. Ayrıca bir location bloğunda tek bir add_header bile tanımlanırsa üst seviyedeki başlıklar o blokta miras alınmaz; 1.29.3 sürümüyle gelen add_header_inherit direktifi bu davranışı değiştirmeye izin verir.

server {
    add_header Strict-Transport-Security "max-age=63072000; includeSubDomains" always;
    add_header X-Content-Type-Options "nosniff" always;

    location /indir/ {
        add_header Content-Disposition "attachment";
        # Bu blokta yukarıdaki iki başlık artık gönderilmez!
    }
}

Başlıkların yapamadıkları

Güvenlik başlıkları zararı sınırlayan bir katmandır. Girdi doğrulaması yapılmayan bir form, yetki kontrolü olmayan bir API uç noktası veya güncellenmemiş bir eklenti, başlıklar kusursuz olsa da açık kalır. Bir tarama aracındaki “A+” notu da sitenin güvenli olduğunu değil, belirli başlıkların gönderildiğini gösterir. CSP gibi kısıtlayıcı başlıkları canlıya almadan önce rapor modunda denemek, siteyi bozmadan sorunları görmeyi sağlar. Hızlı bir kontrol için SEO Analiz Aracı CSP, nosniff, Referrer-Policy ve çerçeve koruması başlıklarının varlığını raporlar. Güncel öneriler OWASP HTTP Headers Cheat Sheet'te tutulur.

İlgili terimler

← Sözlüğe dön