- Konu sahibi
- #1
HTTP güvenlik başlıklarını doğrulamak için önce sunucunun gerçekten hangi yanıtı gönderdiğini kontrol edin, ardından bu başlığın tarayıcıda hangi davranışı değiştirdiğini test edin. Yalnızca başlığın listede görünmesi yeterli değildir; doğru yanıtta, doğru değerle ve mümkünse HTTPS üzerinden gönderilmesi gerekir.
Kendi siteniz için POSIX terminalde aşağıdaki örneği kullanabilirsiniz; example.com yerine yetkili olduğunuz hedefi yazın. Windows PowerShell’de gerçek curl.exe ve işletim sistemine uygun çıktı hedefini kullanın:
Bu komut GET yanıt gövdesini alıp /dev/null aygıtına atarken başlıkları gösterir, yönlendirmeleri takip eder ve her yanıtın başlıklarını yazdırır. Başarıyla çalıştığında çıktının başında
Aşağıdaki özet, bir başlığın görünmesinin ne anlama geldiğini ve tarayıcıda hangi sonucu doğurabileceğini ayırır. Değer seçimi sitenin kullandığı kaynaklara ve özelliklere göre yapılmalıdır; her site için aynı politika doğru değildir.
Tablodaki başlıkların tümü her sayfada aynı biçimde bulunmak zorunda değildir. Örneğin yalnızca HTTPS yanıtlarında anlamlı olan HSTS, HTTP yanıtına eklenerek etkili hâle gelmez. CSP'de ise izin verilen kaynaklar uygulamanın gerçek ihtiyaçlarını kapsamazsa başlık teknik olarak mevcut olsa bile site işlevlerini engeller.
Başlık yoksa o yanıtla o politika bildirilmemiştir; önceki HSTS durumu veya eşdeğer başka politika gibi etkenler ayrıca var olabilir. Başlık varsa fakat değeri beklenenden genişse koruma zayıflayabilir; örneğin CSP'nin aşırı geniş kaynak izinleri politikayı formal olarak mevcut, pratik olarak etkisiz bırakabilir. Değer aşırı dar ise güvenlik kazanımı karşılığında kendi JavaScript'iniz, ödeme bileşeniniz veya üçüncü taraf içeriğiniz çalışmayabilir.
Bir yönlendirme zincirinde HTTPS'ye geçmeden önceki yanıt ile son HTTPS yanıtını ayrı değerlendirin. Ayrıca hata sayfalarını, giriş sayfasını, statik dosya alan adını ve API yanıtlarını da kontrol edin. Güvenlik başlıkları yalnızca ana sayfada bulunuyorsa tüm siteyi korudukları sonucuna varmayın.
Sadece çevrim içi puana güvenmek: Bir tarama aracı eksikliği gösterebilir ancak hangi ara yanıtta veya hangi proxy katmanında oluştuğunu açıklamayabilir. Ham yanıt başlıklarını da inceleyin; Set-Cookie ve oturum sırlarını destek mesajına taşımadan maskeleyin.
Report-Only politikasını etkin politika sanmak: CSP'nin raporlama biçimi ihlalleri bildirebilir fakat içeriği engellemez. Engelleme bekleniyorsa etkin CSP başlığının gönderildiğini doğrulayın.
Yalnızca ana sayfayı test etmek: Uygulama, API veya hata yanıtları farklı sunucu kurallarından geçebilir. Kritik uç noktaları ayrı ayrı kontrol edin.
HSTS'yi hazırlık yapmadan genişletmek: Alt alan adlarından biri HTTPS desteklemiyorsa geniş kapsamlı bir HSTS değeri o alan adına erişimi bozabilir. Tüm kapsamı doğrulamadan genişletmeyin.
En küçük doğrulama işlemi
Kendi siteniz için POSIX terminalde aşağıdaki örneği kullanabilirsiniz; example.com yerine yetkili olduğunuz hedefi yazın. Windows PowerShell’de gerçek curl.exe ve işletim sistemine uygun çıktı hedefini kullanın:
Kod:
curl -sS -D - -o /dev/null -L --max-redirs 5 --connect-timeout 10 --max-time 20 https://example.com/
Bu komut GET yanıt gövdesini alıp /dev/null aygıtına atarken başlıkları gösterir, yönlendirmeleri takip eder ve her yanıtın başlıklarını yazdırır. Başarıyla çalıştığında çıktının başında
HTTP/1.1 veya HTTP/2 gibi bir durum satırı ve altında content-type benzeri başlıklar görülür. Could not resolve host, TLS hatası veya bağlantı zaman aşımı görülürse henüz güvenlik başlıklarını değerlendirmeyin; önce DNS, HTTPS veya erişim sorununu düzeltin.- Üretimde kullandığınız HTTPS adresini test edin.
http://adresini ayrıca çalıştırarak HTTP'den HTTPS'ye yönlendirmenin güvenli olduğunu kontrol edin. - Çıktıdaki her durum satırını ayrı inceleyin.
-Lkullanıldığı için yönlendirme yanıtları da listelenebilir; yalnızca son yanıta bakmak ara yanıtın zayıf olduğunu gizleyebilir. - Başlık adını ve değerini birebir karşılaştırın. Örneğin
Content-Security-Policy-Report-OnlyileContent-Security-Policyaynı etkiye sahip değildir. - Aynı adresi bir tarayıcıda açarak başlığın davranışsal etkisini test edin. Konsol hatası, engellenen iframe, engellenen kaynak veya izin verilmeyen tarayıcı özelliği varsa bunun ilgili politikayla tutarlı olup olmadığını değerlendirin.
- Eksik, yanlış veya yalnızca bazı yanıtlarda bulunan başlıkları sunucu, ters proxy, CDN ve uygulama katmanlarında ayrı ayrı düzeltin; sonra komutu yeniden çalıştırın.
Başlık, değer ve tarayıcı etkisi
Aşağıdaki özet, bir başlığın görünmesinin ne anlama geldiğini ve tarayıcıda hangi sonucu doğurabileceğini ayırır. Değer seçimi sitenin kullandığı kaynaklara ve özelliklere göre yapılmalıdır; her site için aynı politika doğru değildir.
| Başlık | Değerin kapsamı | Tarayıcıdaki temel etki | Kontrol noktası |
|---|---|---|---|
| Strict-Transport-Security | HSTS süresi ve isteğe bağlı alt alan adı kapsamı | Tarayıcı, sonraki bağlantıları HTTPS'ye zorlar | Yalnız güvenli HTTPS yanıtında değerlendirin; alt alan adlarını etkileyen değeri plansız kullanmayın |
| Content-Security-Policy | Script, stil, görsel, çerçeve ve diğer kaynakların izin listeleri | İzin verilmeyen kaynakları yüklemeyi veya çalıştırmayı engelleyebilir | Site özelliklerini bozabilecek dar bir politika ile aşamalı test edin |
| X-Content-Type-Options | Genellikle nosniff | Tarayıcının MIME türünü tahmin ederek kaynağı farklı yorumlamasını sınırlar | CSS ve JavaScript yanıtlarının doğru Content-Type ile gönderildiğini kontrol edin |
| Referrer-Policy | Başka siteye geçerken gönderilecek referrer ayrıntısı | URL yolunun veya sorgu bilgilerinin ne kadarının paylaşılacağını sınırlar | Özel bilgi içeren URL'lerin dış isteklere taşınmadığını test edin |
| Permissions-Policy | Kamera, mikrofon, konum gibi özelliklerin kaynak bazlı izinleri | Belirli özelliklerin sayfa veya iframe tarafından kullanılmasını kısıtlar | Gerçekten kullanılan özellikleri kapatmadığından emin olun |
| X-Frame-Options veya CSP frame-ancestors | Sayfanın iframe içinde kimlerce açılabileceği | Yetkisiz çerçeveleme ve bazı tıklama yönlendirme senaryolarını önler | Gömülü ödeme, giriş veya yönetim ekranlarını ayrıca deneyin |
Tablodaki başlıkların tümü her sayfada aynı biçimde bulunmak zorunda değildir. Örneğin yalnızca HTTPS yanıtlarında anlamlı olan HSTS, HTTP yanıtına eklenerek etkili hâle gelmez. CSP'de ise izin verilen kaynaklar uygulamanın gerçek ihtiyaçlarını kapsamazsa başlık teknik olarak mevcut olsa bile site işlevlerini engeller.
Sonucu nasıl yorumlamalı?
Başlık yoksa o yanıtla o politika bildirilmemiştir; önceki HSTS durumu veya eşdeğer başka politika gibi etkenler ayrıca var olabilir. Başlık varsa fakat değeri beklenenden genişse koruma zayıflayabilir; örneğin CSP'nin aşırı geniş kaynak izinleri politikayı formal olarak mevcut, pratik olarak etkisiz bırakabilir. Değer aşırı dar ise güvenlik kazanımı karşılığında kendi JavaScript'iniz, ödeme bileşeniniz veya üçüncü taraf içeriğiniz çalışmayabilir.
Bir yönlendirme zincirinde HTTPS'ye geçmeden önceki yanıt ile son HTTPS yanıtını ayrı değerlendirin. Ayrıca hata sayfalarını, giriş sayfasını, statik dosya alan adını ve API yanıtlarını da kontrol edin. Güvenlik başlıkları yalnızca ana sayfada bulunuyorsa tüm siteyi korudukları sonucuna varmayın.
Sık yapılan hatalar
Sadece çevrim içi puana güvenmek: Bir tarama aracı eksikliği gösterebilir ancak hangi ara yanıtta veya hangi proxy katmanında oluştuğunu açıklamayabilir. Ham yanıt başlıklarını da inceleyin; Set-Cookie ve oturum sırlarını destek mesajına taşımadan maskeleyin.
Report-Only politikasını etkin politika sanmak: CSP'nin raporlama biçimi ihlalleri bildirebilir fakat içeriği engellemez. Engelleme bekleniyorsa etkin CSP başlığının gönderildiğini doğrulayın.
Yalnızca ana sayfayı test etmek: Uygulama, API veya hata yanıtları farklı sunucu kurallarından geçebilir. Kritik uç noktaları ayrı ayrı kontrol edin.
HSTS'yi hazırlık yapmadan genişletmek: Alt alan adlarından biri HTTPS desteklemiyorsa geniş kapsamlı bir HSTS değeri o alan adına erişimi bozabilir. Tüm kapsamı doğrulamadan genişletmeyin.