HTTP Güvenlik Başlıkları Rehberi: CSP, HSTS ve Ötesi
Bir web sitesinin HTTP yanıtına eklenen güvenlik başlıkları ne işe yarar, CSP ve HSTS nasıl kurulur, hangi başlık hangi saldırıyı engeller; sade bir anlatım.
rabbitclip ekibiYayın: 4 dk okuma
Kısa cevap
HTTP güvenlik başlıkları, bir web sunucusunun her sayfa isteğine eklediği ve tarayıcıya nasıl davranması gerektiğini söyleyen kurallardır. CSP hangi kaynaktan script ve görsel yükleneceğini sınırlar, HSTS tarayıcıyı her zaman şifreli bağlantı kullanmaya zorlar, X-Content-Type-Options ve Referrer-Policy gibi diğerleri daha küçük ama yine de gerçek riskleri kapatır. Hiçbiri kod yazmayı gerektirmez; sunucu ya da CDN ayarlarına birkaç satır eklemek yeterlidir.
Bir hukuk bürosunun sitesi doğru yapılandırılmış bir CSP olmadan üçüncü taraf bir reklam script'i çalıştırdığında, o script sayfanın içine istediği herhangi bir kodu ekleyebilir; ziyaretçinin form doldurduğu bir sayfada bu risk soyut değildir. Güvenlik başlıkları bu tür bir script'in neler yapabileceğini baştan sınırlar.
HTTP güvenlik başlığı nedir, nasıl çalışır?
HTTP güvenlik başlığı, sunucunun her yanıtla birlikte gönderdiği ek bir talimat satırıdır; tarayıcı bu talimatı okur ve sayfayı ona göre kısıtlar. Başlıklar sayfa içeriğini değiştirmez, yalnızca tarayıcının o içerikle ne yapabileceğini sınırlar.
Bu başlıkları eklemek için siteye yeni bir özellik yazmaya gerek yoktur; Nginx, Apache, Cloudflare ya da Next.js gibi bir çatının yapılandırma dosyasına birkaç satır eklemek yeterlidir. Bir kez doğru kurulduktan sonra her sayfa isteğinde otomatik olarak gönderilir.
Content-Security-Policy (CSP) ne işe yarar?
CSP, bir sayfanın script, görsel, font ve stil gibi kaynakları hangi adreslerden yükleyebileceğini belirler. OWASP'ın HTTP başlıkları kılavuzuna göre CSP, sayfaya kod enjekte edildikten sonra bile bu kodun çalışmasını anlamlı biçimde engelleyen tek başlıktır; bu yüzden siteler arası script çalıştırma (XSS) saldırılarına karşı en etkili önlemlerden biridir.
Kurulumun zor tarafı, sitenin gerçekten kullandığı her üçüncü taraf kaynağı, analitik, font servisi, ödeme sağlayıcısı, listeye eklemektir; eksik bırakılan bir kaynak sayfanın bir bölümünün çalışmamasına yol açar. Bu yüzden CSP genelde önce yalnızca raporlayan bir modda çalıştırılır, günlükler incelenir, sonra kısıtlayıcı moda geçilir.
HSTS (Strict-Transport-Security) neyi garanti eder?
HSTS, tarayıcıya bir siteye bir daha asla şifresiz (http://) bağlanmamasını söyler; bu talimat tarayıcı tarafında saklanır ve kullanıcı adres çubuğuna http yazsa bile bağlantı otomatik olarak https'e yükseltilir. Bu, bağlantının araya girilerek şifresiz hale getirilmesini (man-in-the-middle) önler.
MDN'in önerdiği yapı max-age süresini uzun tutmak, örneğin iki yıl, alt alan adlarını da kapsama dahil etmek ve preload listesine katılmaktır; ama preload'a katılmadan önce sitenin tüm alt alan adlarının gerçekten https üzerinden çalıştığından emin olunmalıdır, çünkü preload listesinden çıkmak kolay değildir.
Temel başlık seti nasıl kurulur?
Küçük bir kurumsal site için aşağıdaki beş başlık makul bir başlangıç noktasıdır; her biri farklı bir riski kapatır.
- Content-Security-Policy: script ve kaynak yüklemesini sınırlar
- Strict-Transport-Security: bağlantıyı her zaman şifreli tutar
- X-Content-Type-Options: nosniff, tarayıcının dosya türünü yanlış tahmin etmesini engeller
- Referrer-Policy: hangi sayfa bilgisinin başka sitelere sızacağını sınırlar
- Permissions-Policy: kamera, konum gibi tarayıcı özelliklerine erişimi kısıtlar
Başlıkları test etmek ve hatasız tutmak
Bir başlık yanlış yapılandırıldığında sayfa görünür biçimde bozulabilir ya da sessizce bir özelliği devre dışı bırakabilir; ikisi de yayına çıkmadan önce test edilmeli. Tarayıcının geliştirici konsolu CSP ihlallerini doğrudan gösterir; bir kaynak engellendiğinde hangi kaynak olduğu ve neden engellendiği konsolda yazılıdır.
Değişiklik önce bir test ortamında, sonra canlıda düşük riskli bir sayfada denenmeli; tüm siteye aynı anda uygulamak, beklenmeyen bir üçüncü taraf entegrasyonunu kırma riski taşır.
Daha az bilinen ama faydalı iki başlık
X-Frame-Options, sayfanın başka bir sitenin içine bir iframe olarak yerleştirilip yerleştirilemeyeceğini belirler; bu olmadan bir saldırgan sitenizi görünmez bir katman altına gizleyip ziyaretçiyi kendi düğmesine değil sizin düğmenize tıklattığını sandırabilir (clickjacking). Ödeme ya da giriş sayfası olan her site için bu başlık bir zorunluluk gibi değerlendirilmelidir.
Cross-Origin-Opener-Policy ise sayfanın başka bir sekmeden ya da pencereden erişilebilirliğini sınırlar; özellikle üçüncü taraf ödeme sağlayıcısına yönlendirme yapan siteler için ek bir izolasyon katmanı sağlar. İkisi de CSP kadar sık konuşulmaz ama kurulumu aynı derecede basittir.
Sık yapılan hatalar
Güvenlik başlıkları eklenip bir daha bakılmayan bir ayar haline gelebilir; bu, yeni bir entegrasyon eklendiğinde fark edilmeyen bir kırılmaya yol açar.
- CSP'yi unsafe-inline ile gevşetip başlığı büyük ölçüde etkisiz bırakmak
- HSTS'i test etmeden preload listesine eklemek
- Yeni bir üçüncü taraf script eklendiğinde CSP listesini güncellememek
- Başlıkları yalnızca ana sayfada kurup alt sayfalarda unutmak
HTTP güvenlik başlıkları, sitenin görünümünü değil tarayıcının o siteyle ne yapabileceğini belirler; kurulumu bir kerelik bir iştir ama takibi süreklidir. Beş temel başlıkla başlayıp zamanla ek katmanlar eklemek, hiçbirini kurmamaktan çok daha güvenli bir noktadır. rabbitclip ile yapılan bir keşif görüşmesinde mevcut sitenizin hangi başlıklara sahip olduğunu birlikte kontrol edebiliriz.
Sık sorulanlar
Güvenlik başlıkları SEO'yu etkiler mi?
Doğrudan etkilemez ama HTTPS'e zorlayan HSTS gibi başlıklar, güvenli bağlantıyı önemseyen arama motorları için dolaylı bir olumlu sinyaldir.
CSP kurmak sitenin çalışmasını bozar mı?
Yanlış yapılandırılırsa evet. Önce rapor modunda test edip günlükleri inceledikten sonra kısıtlayıcı moda geçmek bu riski azaltır.
Bu başlıklar hangi sunucuda kurulur?
Nginx, Apache, Cloudflare ya da Next.js gibi bir çatının yapılandırmasında; her biri için sözdizimi farklıdır ama mantık aynıdır.
Küçük bir site için bu başlıklar gerekli mi?
Evet. Site büyüklüğü fark etmez; form, giriş sayfası ya da üçüncü taraf script çalıştıran her site aynı temel risklerle karşı karşıyadır.
X-Frame-Options ile CSP'nin frame-ancestors kuralı aynı şey mi?
Amaçları örtüşür ama CSP'nin frame-ancestors kuralı daha yeni ve daha esnektir; eski tarayıcı desteği gerekiyorsa ikisi birlikte kullanılır.
