HTTP güvenlik başlıkları rehberi: HSTS, CSP ve diğerleri ne işe yarar?
· 5 dk okuma
Adres çubuğunda kilit simgesi görmek, sitenin HTTPS ile sunulduğunu gösterir; ama sitenin güvenli olduğunu tek başına kanıtlamaz. Tarayıcıya “bu sayfayı nasıl korumalısın?” sorusunun cevabını veren şey HTTP güvenlik başlıklarıdır. Bu başlıklar sunucunun her yanıtla birlikte gönderdiği kısa talimatlardır ve doğru ayarlandıklarında tıklama tuzağı (clickjacking), içerik enjeksiyonu ve bağlantı düşürme gibi saldırıların önemli bir kısmını engeller.
Neden önemli?
Güvenlik başlıkları kod yazmadan, sunucu ayarıyla eklenebilen ucuz ama etkili bir savunma katmanıdır. Sitenizde bir açık olsa bile doğru bir içerik güvenliği politikası saldırının işe yaramasını zorlaştırır. Ayrıca kurumsal müşteriler, bankalar ve kamu kurumları tedarikçilerinin sitelerini bu başlıklar üzerinden hızlıca değerlendirir. Kendi sitenizin durumunu güvenlik testimizle birkaç saniyede görebilirsiniz.
Temel başlıklar ve görevleri
Strict-Transport-Security (HSTS)
Tarayıcıya “bu alan adına bundan sonra yalnız HTTPS ile bağlan” der. Böylece kullanıcı adres çubuğuna http:// yazsa bile bağlantı şifresiz kurulmaz ve araya girme saldırılarının bir türü engellenir.
- Örnek değer:
max-age=31536000; includeSubDomains max-agesaniye cinsindendir; 31536000 bir yıl demektir.includeSubDomainstüm alt alan adlarını da kapsar. Eklemeden önce her alt alan adınızın HTTPS ile çalıştığından emin olun.preloadifadesi ve tarayıcıların ön yükleme listesine kayıt, geri alınması aylar sürebilen bir karardır; acele etmeyin.
Content-Security-Policy (CSP)
Sayfanın hangi kaynaklardan betik, stil, görsel ve çerçeve yükleyebileceğini belirler. Sitenize bir şekilde zararlı bir betik enjekte edilse bile, izin listesinde olmayan bir kaynaktan geliyorsa tarayıcı onu çalıştırmaz.
- Basit bir başlangıç:
default-src 'self'; img-src 'self' data: https:; object-src 'none'; base-uri 'self' - Satır içi betik kullanıyorsanız
'unsafe-inline'yerine her istekte değişen bir nonce kullanmak çok daha güvenlidir. - Önce
Content-Security-Policy-Report-Onlybaşlığıyla deneyin. Bu mod hiçbir şeyi engellemez, yalnız neyin engelleneceğini raporlar.
X-Frame-Options ve frame-ancestors
Sitenizin başka bir sitede görünmez bir çerçeve içine yerleştirilip kullanıcının farkında olmadan tıklatılmasını (clickjacking) önler. X-Frame-Options: SAMEORIGIN eski tarayıcılar için, CSP içindeki frame-ancestors 'self' yönergesi ise modern tarayıcılar için kullanılır. İkisini birlikte göndermek zararsızdır.
X-Content-Type-Options
nosniff değeriyle gönderilir. Tarayıcının bir dosyanın türünü tahmin etmeye çalışmasını engeller; örneğin bir metin dosyasının betik gibi çalıştırılmasının önüne geçer. Yan etkisi neredeyse yoktur, her sitede bulunmalıdır.
Referrer-Policy
Ziyaretçi sitenizden başka bir siteye geçtiğinde hangi adres bilgisinin aktarılacağını belirler. strict-origin-when-cross-origin iyi bir varsayılandır: kendi siteniz içinde tam adres, dış sitelere ise yalnız alan adı gönderilir. Böylece adreste yer alabilecek arama terimleri veya kimlik bilgileri dışarı sızmaz.
Permissions-Policy
Sayfanın kamera, mikrofon, konum, ödeme gibi tarayıcı özelliklerini kullanıp kullanamayacağını belirler. Bu özellikleri kullanmıyorsanız kapatmak, üçüncü taraf kodların bunlara erişmesini de engeller. Örnek: camera=(), microphone=(), geolocation=().
Güvenli ekleme sırası
Başlıkları tek seferde ve rastgele eklemek siteyi bozabilir. Şu sırayı öneriyoruz:
- Yan etkisi düşük olanlar:
X-Content-Type-Options,Referrer-Policy,X-Frame-Options. - HTTPS’i sabitleyin: Tüm sayfaların, görsellerin ve alt alan adlarının HTTPS ile açıldığını doğrulayın; sonra kısa bir
max-age(örneğin bir gün) ile HSTS ekleyin ve sorun çıkmazsa bir yıla çıkarın. - Permissions-Policy: Kullanmadığınız özellikleri kapatın.
- CSP: Önce rapor modunda bir iki hafta çalıştırın, raporlardaki meşru kaynakları izin listesine ekleyin, sonra engelleme moduna geçin.
Apache kullanan paylaşımlı barındırmalarda bu başlıklar genellikle .htaccess dosyasına Header always set satırlarıyla eklenir. Uygulamanız PHP ile yanıt üretiyorsa başlıkları kod içinden göndermek, özellikle nonce gerektiren CSP için daha esnektir.
Sık yapılan hatalar
- HSTS’yi alt alan adlarını kontrol etmeden eklemek: HTTPS’i olmayan eski bir alt alan adı birden erişilemez hale gelir.
- CSP’ye
*veya'unsafe-eval'eklemek: Politika var gibi görünür ama koruma neredeyse sıfırlanır. - Başlığı iki yerden göndermek: Hem sunucu ayarı hem uygulama aynı başlığı farklı değerlerle gönderirse tarayıcı beklenmedik davranabilir.
- Ekleyip test etmemek: Her değişiklikten sonra formlar, ödeme sayfası, harita ve video gibi dış kaynak kullanan bölümleri mutlaka deneyin.
Kontrol listesi
- Site ve tüm alt alan adları HTTPS ile açılıyor, HTTP istekleri tek adımda HTTPS’e yönleniyor.
Strict-Transport-Securityen az altı aymax-ageile gönderiliyor.X-Content-Type-Options: nosniffvar.X-Frame-Optionsveyaframe-ancestorstanımlı.Referrer-PolicyvePermissions-Policytanımlı.- CSP en azından rapor modunda çalışıyor.
Örnek senaryo: CSP’yi bir kurumsal siteye eklemek
Google Analytics, bir canlı destek balonu ve gömülü bir YouTube videosu kullanan tipik bir kurumsal site düşünelim. CSP eklerken izlenecek yol şudur:
- Kaynak envanteri çıkarın. Tarayıcının geliştirici araçlarındaki “Ağ” sekmesinde sayfanın hangi alan adlarından dosya yüklediğini listeleyin: kendi alan adınız,
www.googletagmanager.com, canlı destek sağlayıcısının alan adı vewww.youtube.com. - Rapor modunda başlayın. Bu alan adlarını içeren bir politikayı
Content-Security-Policy-Report-Onlybaşlığıyla yayına alın. Tarayıcı konsolunda ihlal uyarılarını izleyin. - Eksikleri tamamlayın. Canlı destek aracının görsellerini başka bir alan adından yüklediğini ya da analitik kodunun ek bir bağlantı adresi kullandığını genellikle bu aşamada fark edersiniz.
- Engelleme moduna geçin. Bir iki hafta boyunca yeni ihlal görmediğinizde başlığın adını
Content-Security-Policyolarak değiştirin. - Değişiklik sürecine bağlayın. Siteye yeni bir üçüncü taraf araç eklendiğinde CSP’nin de güncellenmesi gerektiğini ekibinize not edin; aksi halde yeni araç sessizce çalışmaz.
Bu yöntemle CSP, siteyi bozmadan ve kimsenin işini durdurmadan devreye alınır. En önemli kazanım, sitede bir eklenti açığı oluştuğunda bile yabancı bir alan adından betik yüklenmesinin engellenmesidir.
Sonuç
Güvenlik başlıkları, saldırganların işini zorlaştıran ve çoğu zaman bir öğleden sonrada eklenebilen bir savunma katmanıdır. Önemli olan acele etmeden, sırayla ve her adımda test ederek ilerlemektir. E-posta tarafındaki güvenliği de ihmal etmemek için SPF, DKIM ve DMARC rehberimize göz atabilirsiniz.
Kendi sitenizi test edin
Bu yazıda anlatılanları sitenizde ücretsiz ölçün.
İlgili yazılar
Görsel optimizasyonu: WebP, AVIF, doğru boyut ve tembel yükleme
Görseller çoğu sitede sayfa ağırlığının en büyük kısmını oluşturur. Doğru biçim, doğru boyut, srcset, tembel yükleme ve alt metinle görsellerinizi kaliteden ödün…
Web erişilebilirliği: WCAG 2.2’ye göre 12 maddelik temel kontrol listesi
Erişilebilir bir site; görme, işitme veya hareket kısıtı olan kişilerin yanında yaşlı kullanıcılar ve mobil ziyaretçiler için de daha kolay kullanılır. WCAG 2.2’ye…
SPF, DKIM ve DMARC: Kurumsal e-postalarınız neden spam klasörüne düşüyor?
Alan adınızla gönderdiğiniz e-postaların gelen kutusuna ulaşması için üç DNS kaydı gerekir. SPF, DKIM ve DMARC’ın ne yaptığını, nasıl kurulduğunu ve sık yapılan hataları…