HTTP güvenlik başlıkları (security headers), web sunucusunun her yanıtla birlikte tarayıcıya gönderdiği ve tarayıcının sayfayı nasıl ele alacağını belirleyen talimatlardır. Doğru yapılandırıldıklarında clickjacking, siteler arası betik çalıştırma (XSS), MIME türü karıştırma ve bilgi sızdırma gibi yaygın saldırıların etkisini önemli ölçüde azaltırlar. R10.Net Güvenlik Başlıkları Testi, girdiğiniz adresi ziyaret ederek yanıt başlıklarını okur, en önemli altı başlığı tek tek değerlendirir ve sitenize A+ ile F arasında bir not verir.
Test nasıl yapılır?
- Kutuya alan adını veya tam adresi yazın (örneğin
ornek.comya dahttps://ornek.com/giris). - Sorgula düğmesine basın. Araç adresi bir tarayıcı gibi çağırır ve son yanıtın başlıklarını inceler.
- Notu, her başlığın durumunu ve önerileri inceleyin.
Farklı sayfalar farklı başlıklar döndürebilir; özellikle yönetim paneli, giriş sayfası ve statik dosyalar için ayrı test yapmanız faydalıdır.
Kontrol edilen başlıklar
Strict-Transport-Security (HSTS)
Tarayıcıya siteye belirli bir süre boyunca yalnızca HTTPS ile bağlanmasını söyler ve HTTPS'ten HTTP'ye düşürme saldırılarını engeller. Örnek: Strict-Transport-Security: max-age=31536000; includeSubDomains. Bu başlık yalnızca HTTPS yanıtlarında anlamlıdır.
Content-Security-Policy (CSP)
Sayfanın hangi kaynaklardan betik, stil, görsel ve çerçeve yükleyebileceğini tanımlar. XSS'e karşı en etkili başlıktır ancak yapılandırması en zor olanıdır. unsafe-inline ve unsafe-eval ifadeleri korumayı ciddi ölçüde zayıflatır.
X-Frame-Options
Sayfanın başka sitelerde <iframe> içinde gösterilip gösterilemeyeceğini belirleyerek clickjacking'i önler. DENY veya SAMEORIGIN değerleri önerilir. Modern alternatifi CSP'deki frame-ancestors yönergesidir.
X-Content-Type-Options
Tek geçerli değeri nosniff'tir. Tarayıcının dosya türünü tahmin etmesini engeller; böylece örneğin metin olarak yüklenen bir dosyanın betik olarak çalıştırılmasının önüne geçilir.
Referrer-Policy
Başka bir siteye geçildiğinde adres bilgisinin ne kadarının paylaşılacağını belirler. strict-origin-when-cross-origin veya no-referrer gibi değerler, adres çubuğundaki hassas parametrelerin üçüncü taraflara sızmasını önler.
Permissions-Policy
Kamera, mikrofon, konum ve ödeme gibi tarayıcı özelliklerinin sayfada ve gömülü çerçevelerde kullanılıp kullanılamayacağını kontrol eder. Örnek: Permissions-Policy: camera=(), microphone=(), geolocation=().
Güvenlik başlıkları neden önemli?
Güvenlik başlıkları, uygulamanızdaki bir açığı tek başına kapatmaz; ancak tarayıcıya ek bir savunma katmanı ekler. Örneğin sitenize bir şekilde zararlı bir betik enjekte edilse bile iyi yapılandırılmış bir CSP bu betiğin dış bir sunucudan yüklenmesini veya çalışmasını engelleyebilir. Benzer şekilde X-Frame-Options, kullanıcıların farkında olmadan gizli bir çerçevedeki düğmelere tıklatılmasını önler. Bu başlıklar sunucu tarafında birkaç satırlık bir ayarla eklenebildiği için maliyeti düşük, faydası yüksek bir güvenlik önlemidir. Özellikle üye girişi, ödeme veya yönetim paneli barındıran siteler için öncelikli olarak ele alınmalıdır.
Not nasıl hesaplanır?
Her başlığın varlığı ve değerinin güvenli olup olmadığı puana yansır; tüm başlıklar doğru yapılandırılmışsa A+, temel başlıkların çoğu eksikse F alırsınız. Ayrıca Server ve X-Powered-By başlıkları yazılım adını ve sürümünü açıkça gösteriyorsa (örneğin Apache/2.4.41 veya PHP/7.4.3) uyarı verilir. Bu bilgi tek başına bir açık değildir, ancak saldırganların bilinen açıkları olan sürümleri hedeflemesini kolaylaştırır.
Başlıklar nasıl eklenir?
- Apache:
.htaccessveya sanal sunucu yapılandırmasındaHeader always set X-Content-Type-Options "nosniff"biçiminde eklenir (mod_headersetkin olmalıdır). - Nginx:
serverbloğundaadd_header X-Frame-Options "SAMEORIGIN" always;şeklinde tanımlanır. Alt bloklardaadd_headerkullanıldığında üst bloktaki başlıkların devralınmadığını unutmayın. - Cloudflare ve CDN'ler: Yanıt başlığı dönüştürme kurallarıyla sunucuya dokunmadan eklenebilir.
- Sürüm gizleme: Apache'de
ServerTokens Prod, Nginx'teserver_tokens off;, PHP'deexpose_php = Offayarlarını kullanın.
Sık yapılan hatalar
- CSP'yi doğrudan zorunlu kılmak: Sıkı bir CSP, analiz kodlarını, reklamları veya gömülü videoları bozabilir. Önce
Content-Security-Policy-Report-Onlyile ihlalleri izleyin, ardından politikayı uygulamaya alın. - HSTS preload'u aceleyle eklemek:
preloadile tarayıcı listesine girdikten sonra HTTPS desteklemeyen alt alan adlarınıza erişilemez ve listeden çıkmak uzun sürer. Kısa birmax-ageile başlayıp kademeli olarak artırın. - Başlıkları yalnızca ana sayfaya eklemek: Hata sayfaları ve yönlendirme yanıtları da başlıkları göndermelidir; Apache'de
always, Nginx'tealwaysparametresi bunu sağlar. - Çakışan değerler: Hem uygulama hem sunucu aynı başlığı eklerse yanıtta iki farklı değer oluşabilir. Başlıkları tek bir katmanda yönetin.
İlgili araçlar
Sunucunun döndürdüğü tüm HTTP başlıklarını ham hâliyle görmek için Site HTTP Bilgisi, HTTPS sertifikanızın geçerliliğini ve bitiş tarihini kontrol etmek için SSL Sertifika Kontrolü, HTTP'den HTTPS'e yönlendirmeyi doğrulamak için Yönlendirme Kontrolü aracını kullanabilirsiniz.