HTTP Güvenlik Başlıkları: HSTS, CSP ve Diğerleri
HTTP güvenlik başlıkları nedir? HSTS, Content-Security-Policy, X-Content-Type-Options ve Referrer-Policy, Nginx ve .htaccess ile ekleme ve test.

İçindekiler
HTTP güvenlik başlıkları, web sunucunuzun her sayfayla birlikte gönderdiği ve tarayıcıya sayfayı nasıl güvenli şekilde işleyeceğini söyleyen kurallardır. Sitenin yalnızca HTTPS ile açılmasını zorunlu kılmak, sayfanın başka sitelerde gizlice çerçeve içinde gösterilmesini engellemek ve izin verilmeyen betiklerin çalışmasını durdurmak gibi korumalar, birkaç satırlık ayarla eklenir.
Bu rehberde en önemli güvenlik başlıklarını, her birinin ne işe yaradığını, Nginx ve .htaccess ile nasıl ekleneceklerini, Content-Security-Policy'yi siteyi bozmadan uygulamayı ve başlıkları test etmeyi anlatıyoruz.
Önerilen başlıklar
| Başlık | Ne yapar? | Örnek değer |
|---|---|---|
Strict-Transport-Security | Tarayıcının siteyi yalnızca HTTPS ile açmasını sağlar (HSTS) | max-age=31536000; includeSubDomains |
X-Content-Type-Options | Tarayıcının dosya türünü tahmin etmesini engeller | nosniff |
X-Frame-Options | Sayfanın başka sitelerde çerçeve içinde açılmasını engeller | SAMEORIGIN |
Referrer-Policy | Başka sitelere giden bağlantılarda hangi adres bilgisinin iletileceği | strict-origin-when-cross-origin |
Permissions-Policy | Kamera, mikrofon ve konum gibi tarayıcı özelliklerini kısıtlar | camera=(), microphone=(), geolocation=() |
Content-Security-Policy | Hangi kaynaklardan betik, stil ve görsel yüklenebileceğini belirler | Siteye özel |
HSTS: Strict-Transport-Security
HSTS, tarayıcıya sitenizi belirli bir süre boyunca yalnızca HTTPS ile açmasını söyler. Kullanıcı adresi http:// ile yazsa ya da eski bir bağlantıya tıklasa bile tarayıcı doğrudan HTTPS'e geçer; bu, bağlantının ilk anında araya girilmesini zorlaştırır.
Strict-Transport-Security: max-age=31536000; includeSubDomains
max-age: Kuralın saniye cinsinden geçerlilik süresi.31536000bir yıldır.includeSubDomains: Kuralı bütün alt alan adlarına uygular. HTTPS'i olmayan bir alt alan adınız varsa bu seçeneği eklemeyin.
Dikkat: Tarayıcılar HSTS kuralını max-age boyunca hatırlar. Önce kısa bir süreyle (örneğin max-age=300) deneyin, sitenizin ve alt alan adlarınızın her yerinde HTTPS'in çalıştığından emin olduktan sonra süreyi uzatın. Tarayıcılara gömülü HSTS listesine eklenmeyi sağlayan preload seçeneği geri alınması zor bir adımdır; ne yaptığınızdan emin değilseniz kullanmayın. SSL kurulumunu SSL sertifikası nedir? yazımızda anlattık.
X-Content-Type-Options, X-Frame-Options ve Referrer-Policy
Bu üç başlık neredeyse her siteye risksiz eklenebilir:
X-Content-Type-Options: nosniff: Tarayıcının bir dosyanın türünü tahmin etmeye çalışmasını engeller; örneğin bir görsel gibi yüklenen bir dosyanın betik olarak çalıştırılmasını önler.X-Frame-Options: SAMEORIGIN: Sayfanızın yalnızca kendi sitenizde çerçeve içinde açılmasına izin verir. Bu, sayfanızın görünmez bir çerçeveye yerleştirilip kullanıcıların farkında olmadan tıklatıldığı saldırıları (clickjacking) engeller. Sitenizin başka bir sitede gömülü gösterilmesi gerekiyorsa CSP'dekiframe-ancestorsayarını kullanın.Referrer-Policy: strict-origin-when-cross-origin: Başka sitelere giden bağlantılarda tam sayfa adresini değil, yalnızca alan adını iletir. Adreslerde oturum bilgisi ya da kişisel veri taşınıyorsa bunların sızmasını önler.
Permissions-Policy
Sitenizin kullanmadığı tarayıcı özelliklerini kapatır. Sitenize eklenen bir betik ele geçirilse bile kamera, mikrofon ya da konuma erişemez:
Permissions-Policy: camera=(), microphone=(), geolocation=()
Siteniz bu özelliklerden birini kullanıyorsa (örneğin bir mağaza bulucu için konum), ilgili özelliği listeden çıkarın ya da yalnızca kendi alan adınıza izin verin: geolocation=(self).
Content-Security-Policy (CSP)
CSP, en güçlü ama ayarlaması en dikkat isteyen başlıktır. Tarayıcıya hangi kaynaklardan betik, stil, yazı tipi, görsel ve bağlantı yüklenebileceğini söyler. İzin verilmeyen kaynaklar engellenir; bu, sitenize sızdırılan bir betiğin çalışmasını ya da veri göndermesini zorlaştırır.
Basit bir başlangıç kuralı:
Content-Security-Policy: default-src 'self'; img-src 'self' data: https:; style-src 'self' 'unsafe-inline'; frame-ancestors 'self'; base-uri 'self'; form-action 'self'
Analiz, reklam, sohbet ya da ödeme araçları kullanıyorsanız bunların alan adlarını ilgili kurallara eklemeniz gerekir; aksi hâlde çalışmazlar.
CSP'yi siteyi bozmadan uygulamak:
- Kuralı önce
Content-Security-Policy-Report-Onlybaşlığıyla ekleyin. Bu modda tarayıcı hiçbir şeyi engellemez, yalnızca kuralı ihlal eden kaynakları konsola yazar. - Sitenizin bütün sayfalarını gezin ve tarayıcı konsolundaki CSP uyarılarını not edin.
- Gerçekten ihtiyacınız olan kaynakları kurala ekleyin.
- Uyarı kalmadığında başlığı
Content-Security-Policyolarak değiştirin.
Nginx'te başlık ekleme
Server block'unuza ekleyin:
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
add_header X-Content-Type-Options "nosniff" always;
add_header X-Frame-Options "SAMEORIGIN" always;
add_header Referrer-Policy "strict-origin-when-cross-origin" always;
add_header Permissions-Policy "camera=(), microphone=(), geolocation=()" always;
always: Başlığın hata sayfalarında da gönderilmesini sağlar.- Önemli bir tuzak: Nginx'te bir
locationbloğuna kendiadd_headersatırını eklerseniz, o blok üst seviyedeki bütünadd_headersatırlarını devralmayı bırakır. Önbellek başlığı gibi bir şey eklediğinizlocationbloklarında güvenlik başlıklarını da tekrar yazın ya da başlıkları ortak bir dosyada toplayıpincludeile ekleyin.
Ardından sudo nginx -t ve sudo systemctl reload nginx. Nginx'in temellerini Nginx kurulumu rehberimizde anlattık.
Web hostingde .htaccess ile ekleme
Apache ve LiteSpeed kullanan hostinglerde sitenin kök klasöründeki .htaccess dosyasına ekleyin:
<IfModule mod_headers.c>
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"
Header always set X-Content-Type-Options "nosniff"
Header always set X-Frame-Options "SAMEORIGIN"
Header always set Referrer-Policy "strict-origin-when-cross-origin"
Header always set Permissions-Policy "camera=(), microphone=(), geolocation=()"
</IfModule>
.htaccess dosyasındaki tek bir yazım hatası bütün sitenin 500 hatası vermesine yol açabilir; değişiklikten önce dosyanın yedeğini alın ve değişiklikten sonra sitenizi hemen kontrol edin. Hata alırsanız HTTP hata kodları yazımızdaki adımlara bakın.
Çerezler için güvenli ayarlar
Oturum çerezleri, güvenlik başlıkları kadar önemlidir. Uygulamanızın oturum çerezlerinde şu özelliklerin açık olduğundan emin olun:
Secure: Çerez yalnızca HTTPS bağlantılarında gönderilir.HttpOnly: Çereze JavaScript ile erişilemez; sızdırılan bir betik oturum çerezini çalamaz.SameSite=Lax(ya daStrict): Çerezin başka sitelerden gelen isteklerle gönderilmesini sınırlar.
WordPress, Laravel ve diğer yaygın yazılımlar bu ayarları HTTPS kullanıldığında çoğunlukla kendisi yapar; kendi uygulamanızı yazıyorsanız oturum ayarlarında kontrol edin.
Test etme
curl -I https://alanadiniz.com
Komut, sitenizin gönderdiği başlıkları listeler. Tarayıcıda F12 ile açılan geliştirici araçlarının Network sekmesinden de bir sayfanın cevap başlıklarını görebilirsiniz. securityheaders.com gibi test siteleri, adresinizi yazdığınızda eksik başlıkları ve önerileri listeler.
Güvenlik başlıkları bir korunma katmanıdır; güncel yazılım, güçlü şifreler ve düzenli yedekler yine temel korumadır. Kendi sunucunuz için genel güvenlik adımlarını Linux sunucu güvenliği kontrol listemizde anlattık.
Nodesty'de güvenlik başlıkları
Nodesty web hosting paketlerinde LiteSpeed web sunucusu .htaccess kurallarını destekler; güvenlik başlıklarını dosya yöneticisinden .htaccess dosyanıza ekleyebilir, ücretsiz SSL ile HSTS'yi güvenle kullanabilirsiniz. Imunify360 de zararlı istekleri sitenize ulaşmadan durdurur. Kendi web sunucunuzu AMD Ryzen 9 9950X VDS üzerinde yönetiyorsanız bütün başlıkları Nginx yapılandırmanızda dilediğiniz gibi tanımlayabilirsiniz.
Sıkça Sorulan Sorular
Güvenlik başlıkları sitemi hacklenmekten korur mu?
Tek başına hayır. Güvenlik başlıkları tarayıcıya ek kurallar vererek bazı saldırı türlerinin etkisini sınırlar; örneğin bir sayfanın başka bir sitede gizlice çerçeve içinde açılmasını ya da beklenmeyen betiklerin çalışmasını engeller. Güncel yazılım, güçlü şifreler ve yedekler yine temel korumadır.
HSTS açtıktan sonra geri dönebilir miyim?
Tarayıcılar HSTS kuralını max-age süresi boyunca hatırlar. Süreyi 0 yaparak kuralı kaldırabilirsiniz, ama bu yalnızca siteyi yeniden ziyaret eden tarayıcılarda etkili olur. Bu yüzden HSTS'yi önce kısa bir süreyle deneyin ve sitenizin her yerinde HTTPS'in sorunsuz çalıştığından emin olduktan sonra süreyi uzatın.
Content-Security-Policy sitemi bozabilir mi?
Evet. CSP, izin verilmeyen kaynaklardan betik, stil, yazı tipi ve görsel yüklenmesini engeller. Analiz, reklam ve sohbet araçları gibi dış kaynaklar listede yoksa çalışmaz. Önce Content-Security-Policy-Report-Only başlığıyla deneyip tarayıcı konsolundaki uyarılara göre kuralı genişletin.
X-XSS-Protection başlığını eklemeli miyim?
Hayır. Bu başlık eski tarayıcılarda kullanılan bir korumayı açıyordu ve güncel tarayıcılar onu desteklemiyor. XSS'e karşı asıl koruma, kullanıcı girdisinin doğru işlenmesi ve iyi ayarlanmış bir Content-Security-Policy'dir.
Web hostingde güvenlik başlıklarını nasıl eklerim?
Apache ve LiteSpeed kullanan hostinglerde site kök klasöründeki .htaccess dosyasına Header always set satırlarıyla ekleyebilirsiniz. WordPress'te bazı güvenlik eklentileri bu başlıkları ayarlarından eklemenizi de sağlar.
Başlıkların çalışıp çalışmadığını nasıl kontrol ederim?
Tarayıcının geliştirici araçlarında Network sekmesinden sayfanın cevap başlıklarına bakabilir, komut satırında curl -I ile başlıkları görebilir ya da securityheaders.com gibi bir test sitesine adresinizi yazarak eksik başlıkları listeleyebilirsiniz.
Yazar hakkında
Nodesty Ekibi · Altyapı ve Destek
Nodesty ekibi sunucularımızı, ağımızı ve DDoS korumamızı her gün işletir ve müşteri destek taleplerini 7/24 yanıtlar. Bu rehberler o deneyimden yazılır.
İlgili yazılar

UFW Kullanımı: Ubuntu Güvenlik Duvarı Rehberi
UFW nedir, nasıl kullanılır? Ubuntu'da güvenlik duvarını açma, port ve IP kuralları, kural silme, uygulama profilleri, hız sınırlama, IPv6 ve Docker.

SSH Tüneli Nedir? Port Yönlendirme Rehberi
SSH tüneli nedir, nasıl kurulur? Yerel, uzak ve dinamik port yönlendirme, veritabanına ve panellere güvenli erişim, ~/.ssh/config, autossh ve güvenlik.

Web Siteniz Hacklendi mi? Adım Adım Ne Yapmalısınız?
Web siteniz hacklendiyse ne yapmalısınız? Belirtiler, ilk müdahale, şifreler, zararlı dosyaları bulma, temiz yedekten dönme, WordPress ve önlemler.