Süreçlerinize uygun yazılımı birlikte planlayalım. Demo ve teklif için arayın: +90 546 737 48 29

TR EN DE

Güvenlik başlıkları ve HTTPS

Web Sitesi Güvenliği · Hazırlayan: BYK Yazılım Destek Ekibi · Güncelleme: 04.10.2026

Güvenlik başlıkları, sunucunun her yanıtla birlikte tarayıcıya gönderdiği kısa talimatlardır: "bu siteye yalnızca HTTPS ile bağlan", "bu sayfayı başka sitelerin çerçevesinde gösterme", "yalnızca şu kaynaklardan betik çalıştır". Kodunuzu değiştirmeden, birkaç satır yapılandırmayla eklenirler ve tarayıcının yerleşik korumalarını devreye sokarlar.

Başlıklar koddaki açıkları kapatmaz; hata yapıldığında zararı sınırlayan ikinci katmandır. Bu rehber önce HTTPS'in zorunlu kılınmasını, sonra her başlığın ne işe yaradığını ve Apache'de nasıl tanımlandığını anlatır. SSL'in ne olduğu için SSL nedir? rehberine bakın.

Örnekler Apache 2.4 ve mod_headers içindir. Başlıkları eklemeden önce bir test ortamında ya da düşük trafikli bir saatte deneyin; özellikle HSTS ve CSP yanlış ayarlanırsa siteyi erişilemez ya da bozuk gösterebilir.

Dört adımda uygulama

  1. Tüm trafiği HTTPS'e yönlendirin

    Sertifika kurulduktan sonra sitenin http:// adresi açık kalırsa ziyaretçiler şifresiz bağlanmaya devam edebilir. Tüm istekleri kalıcı (301) yönlendirmeyle HTTPS'e gönderin.

    RewriteEngine On
    
    # Doğrudan sunucuya gelen istekler için
    RewriteCond %{HTTPS} off
    RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
    
    # CDN / ters vekil arkasındaysanız yukarıdaki koşul yerine:
    # RewriteCond %{HTTP:X-Forwarded-Proto} =http
    # RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

    Siteniz bir CDN ya da ters vekil sunucunun (ör. Cloudflare) arkasındaysa sunucunuz isteği HTTP olarak görebilir ve bu kural sonsuz yönlendirmeye yol açabilir. Bu durumda yönlendirmeyi CDN panelinden yapın ya da koşulda X-Forwarded-Proto başlığını kullanın.

    Akış şeması: http isteği 301 ile https adresine yönlendirilir, HSTS sonraki ziyaretlerde tarayıcıyı doğrudan https kullanmaya yönlendirir
  2. Temel başlıkları ekleyin

    Aşağıdaki blok, hemen her site için güvenle eklenebilecek başlıkları içerir. .htaccess dosyasının web kökündeki kopyasına ekleyin.

    <IfModule mod_headers.c>
        # Yalnız HTTPS yanıtlarında: tarayıcı bu siteye hep HTTPS ile bağlansın.
        # Önce max-age=300 ile deneyin, sorun yoksa 31536000 (1 yıl) yapın.
        Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains" "expr=%{HTTPS} == 'on'"
    
        # Dosya türünü tahmin etme
        Header always set X-Content-Type-Options "nosniff"
    
        # Başka sitelerin çerçevesinde gösterilme
        Header always set X-Frame-Options "SAMEORIGIN"
    
        # Başka sitelere yalnız alan adı gitsin
        Header always set Referrer-Policy "strict-origin-when-cross-origin"
    
        # Kullanılmayan tarayıcı özelliklerini kapat
        Header always set Permissions-Policy "geolocation=(), camera=(), microphone=(), payment=()"
    </IfModule>
    Şema: güvenlik başlıkları ve görevleri; HSTS, CSP, X-Content-Type-Options, X-Frame-Options, Referrer-Policy, Permissions-Policy
  3. CSP'yi raporlama modunda başlatın

    Content-Security-Policy en güçlü ama en dikkat isteyen başlıktır. Önce Content-Security-Policy-Report-Only adıyla ekleyin: hiçbir şey engellenmez, ihlaller tarayıcı konsolunda görünür. İhlalleri giderdikten sonra uygulamaya geçin.

    Akış şeması: CSP raporlama modu, ihlalleri inceleme, politikayı düzeltme, uygulamaya geçme
  4. Sonucu doğrulayın

    Tarayıcının geliştirici araçlarında Ağ sekmesinden sayfa isteğini seçip yanıt başlıklarına bakın ya da komut satırından başlıkları isteyin. Başlıkların yalnızca ana sayfada değil, hata sayfalarında ve alt sayfalarda da geldiğini kontrol edin.

    # Yanıt başlıklarını göster (kendi alan adınızla)
    curl -sI https://www.ornek-site.com/
    
    # HTTP adresinin HTTPS'e yönlendiğini doğrula
    curl -sI http://www.ornek-site.com/ | grep -i -E "^(HTTP|location)"
    Kontrol listesi: https yönlendirme, HSTS, nosniff, çerçeve koruması, referrer, permissions, CSP

Belirtiler: eksik başlık nasıl fark edilir?

  • Sitenin http:// adresi HTTPS'e yönlenmeden açılıyor.
  • Tarayıcı konsolunda "karışık içerik" (mixed content) uyarıları var: HTTPS sayfa, HTTP üzerinden görsel ya da betik yüklüyor.
  • Yanıt başlıklarında Strict-Transport-Security, X-Content-Type-Options ya da Content-Security-Policy yok.
  • Siteniz başka bir sitenin içinde çerçeve (iframe) olarak açılabiliyor.
  • Yanıtta X-Powered-By ya da ayrıntılı Server başlığı sürüm bilgisi veriyor.

Başlıkların ayrıntısı

Strict-Transport-Security (HSTS)

Tarayıcıya, belirtilen süre boyunca bu alan adına yalnızca HTTPS ile bağlanmasını söyler. Kullanıcı adresi http:// ile yazsa bile tarayıcı isteği göndermeden HTTPS'e çevirir; böylece ilk istekteki şifresiz anın araya girilerek kötüye kullanılması önlenir.

  • Yalnızca HTTPS yanıtlarında gönderilmelidir.
  • Önce kısa bir süreyle (ör. max-age=300) deneyin; sorun yoksa bir yıla (31536000) çıkarın.
  • includeSubDomains, tüm alt alan adlarını kapsar. Eklemeden önce HTTPS desteklemeyen alt alan adınız olmadığından emin olun.
  • preload, alan adının tarayıcıların yerleşik listesine alınması içindir ve geri dönüşü zordur; emin olmadan eklemeyin.

X-Content-Type-Options

nosniff değeri, tarayıcının bir dosyanın türünü içeriğine bakarak tahmin etmesini engeller. Örneğin görsel olarak yüklenmiş bir dosyanın betik gibi yorumlanmasını önler. Yan etkisi yok denecek kadar azdır; her sitede açık olmalıdır.

X-Frame-Options ve frame-ancestors

Sitenizin başka bir sitenin çerçevesi içinde gösterilmesini engeller. Bu, görünmez bir çerçeve üzerinden kullanıcıya fark ettirmeden tıklama yaptırılmasına (clickjacking) karşı korur. SAMEORIGIN yalnızca kendi sitenizin çerçevelemesine izin verir. Güncel karşılığı CSP'nin frame-ancestors yönergesidir; ikisini birlikte göndermek eski ve yeni tarayıcıları kapsar.

Referrer-Policy

Ziyaretçi sitenizden başka bir siteye geçtiğinde tarayıcının hangi adres bilgisini ileteceğini belirler. strict-origin-when-cross-origin dengeli bir değerdir: başka sitelere yalnızca alan adınız gider, sayfa yolu ve parametreler gitmez.

Permissions-Policy

Sayfanın ve içine gömülen çerçevelerin kamera, mikrofon, konum gibi tarayıcı özelliklerini kullanıp kullanamayacağını belirler. Kullanmadığınız özellikleri kapatmak, sayfaya karışan yabancı bir betiğin bunları istemesini engeller. Sitenizde harita ya da konum özelliği varsa ilgili izni kendi kaynağınız için açık bırakın.

Content-Security-Policy adım adım

CSP, sayfanın hangi kaynaklardan içerik yükleyebileceğini tanımlar. Başlıca yönergeler:

  • default-src: Diğer yönergelerde belirtilmeyen türler için varsayılan kaynak.
  • script-src: Betiklerin yüklenebileceği kaynaklar. XSS'e karşı asıl korumayı bu sağlar.
  • style-src, img-src, font-src, connect-src: Stil, görsel, yazı tipi ve arka plan istekleri.
  • frame-ancestors: Sayfayı kimlerin çerçeveleyebileceği.
  • object-src 'none' ve base-uri 'self': Eski eklenti içeriklerini ve <base> etiketinin değiştirilmesini engeller.
  • form-action: Formların gönderilebileceği adresler.

Başlangıç için raporlama modunda bir politika:

<IfModule mod_headers.c>
    Header always set Content-Security-Policy-Report-Only "default-src 'self'; script-src 'self'; style-src 'self' 'unsafe-inline' https://fonts.googleapis.com; font-src 'self' https://fonts.gstatic.com; img-src 'self' data:; connect-src 'self'; object-src 'none'; base-uri 'self'; form-action 'self'; frame-ancestors 'self'"
</IfModule>

Konsoldaki ihlallere göre politikayı düzenleyin: kullandığınız harici kaynakları (yazı tipi, analiz, harita) ilgili yönergeye tek tek ekleyin. Satır içi betikleri ve onclick gibi olay özniteliklerini ayrı dosyalara taşımak, script-src yönergesinden 'unsafe-inline' değerini çıkarabilmenizi sağlar; CSP'nin XSS'e karşı gerçek değeri budur. İhlaller bittiğinde başlığı uygulama moduna alın:

<IfModule mod_headers.c>
    # İhlaller giderildikten sonra: aynı politika, bu kez uygulanır
    Header always set Content-Security-Policy "default-src 'self'; script-src 'self'; style-src 'self' 'unsafe-inline' https://fonts.googleapis.com; font-src 'self' https://fonts.gstatic.com; img-src 'self' data:; connect-src 'self'; object-src 'none'; base-uri 'self'; form-action 'self'; frame-ancestors 'self'"
</IfModule>

Taşınamayan satır içi betikler için her yanıtta yeniden üretilen bir nonce değeri kullanılabilir; bu durumda başlık PHP tarafından gönderilir.

<?php
// Her yanıtta yeni bir nonce üretilir
$nonce = base64_encode(random_bytes(16));
header("Content-Security-Policy: default-src 'self'; script-src 'self' 'nonce-$nonce'; object-src 'none'; base-uri 'self'; frame-ancestors 'self'");
?>
<script nonce="<?= htmlspecialchars($nonce, ENT_QUOTES, 'UTF-8') ?>">
    // Yalnız bu nonce değerini taşıyan satır içi betikler çalışır
    document.documentElement.classList.add('js');
</script>

Sürüm bilgisini azaltın

Yanıt başlıklarında PHP ve sunucu sürümünün görünmesi tek başına bir açık değildir, ancak otomatik taramalara gereksiz bilgi verir. PHP için expose_php = Off ayarı X-Powered-By başlığını kaldırır. Apache'nin Server başlığındaki ayrıntı sunucu yapılandırmasındaki ServerTokens ile azaltılır; paylaşımlı barındırmada bu ayar sağlayıcıdadır.

<IfModule mod_headers.c>
    Header always unset X-Powered-By
    Header unset X-Powered-By
</IfModule>

# php.ini ya da .user.ini içinde:
# expose_php = Off

Asıl koruma sürümü gizlemek değil, güncel tutmaktır.

Sık yapılan hatalar

  • HSTS'yi uzun süreyle ve denemeden açmak: Sertifika sorunu çıktığında ziyaretçiler siteye hiç giremez; süre dolana kadar geri alınamaz.
  • CSP'de her şeye izin vermek: script-src * 'unsafe-inline' 'unsafe-eval' gibi bir politika koruma sağlamaz.
  • Başlıkları yalnızca PHP'de göndermek: Görsel, hata sayfası ve statik dosyalarda başlık gelmez. Sunucu yapılandırmasında tanımlamak daha kapsayıcıdır.
  • Karışık içerik bırakmak: Şablonlarda ve veritabanındaki içerikte http:// ile başlayan kendi adreslerinizi https:// yapın.
  • Çerezleri unutmak: HTTPS'e geçtikten sonra oturum çerezine Secure bayrağını ekleyin. Bkz. Giriş ve oturum güvenliği.

Kontrol listesi

  • HTTP istekleri 301 ile HTTPS'e yönleniyor; yönlendirme döngüsü yok.
  • Sertifika geçerli ve otomatik yenileniyor.
  • Karışık içerik uyarısı yok.
  • HSTS kısa süreyle denendi, sonra uzatıldı.
  • X-Content-Type-Options: nosniff tanımlı.
  • Çerçeveleme X-Frame-Options ve frame-ancestors ile sınırlı.
  • Referrer-Policy ve Permissions-Policy tanımlı.
  • CSP en az raporlama modunda; ihlaller inceleniyor.
  • Başlıklar alt sayfalarda ve hata sayfalarında da geliyor.

Sık sorulan sorular

Başlıkları eklemek sitemi yavaşlatır mı?

Hayır. Başlıklar birkaç yüz baytlık metindir; ölçülebilir bir yavaşlama yaratmaz. HSTS, sonraki ziyaretlerde yönlendirme adımını atladığı için küçük bir hız kazancı bile sağlar.

X-XSS-Protection başlığını eklemeli miyim?

Güncel tarayıcılar bu başlığı desteklemeyi bıraktı; bazı durumlarda sorun da yaratabiliyordu. Yerine Content-Security-Policy kullanın.

.htaccess kullanamıyorum; ne yapabilirim?

Nginx gibi sunucularda aynı başlıklar sunucu yapılandırmasında add_header ile tanımlanır. Paylaşımlı barındırmada sağlayıcınızın panelinde ya da destek ekibinden yardım alarak ekleyebilirsiniz; CDN kullanıyorsanız başlıklar CDN panelinden de eklenebilir.

CSP yüzünden bir özellik bozuldu; ne yapmalıyım?

Tarayıcı konsolundaki ihlal mesajı hangi kaynağın hangi yönergeye takıldığını gösterir. O kaynağı ilgili yönergeye ekleyin ya da satır içi betiği ayrı dosyaya taşıyın. Bu yüzden önce raporlama modunda başlamak önemlidir.

BYK Yazılım Destek Ekibi
Bu rehber BYK Yazılım destek ekibi tarafından hazırlanır ve düzenli olarak gözden geçirilir. Son güncelleme: 04.10.2026.

İlgili rehberler

Web sitenizi birlikte gözden geçirelim

BYK Yazılım kurumsal web siteleri geliştirir. Sitenizle ilgili sorularınız için bize yazabilirsiniz.

Bize ulaşın Kurumsal web sitesi hizmetimiz