Cache-Control başlığını unutmak veya yanlış kullanmak, web sitenizin güvenliğini ve kullanıcılarınızın gizliliğini olumsuz yönde etkileyebilir.
Varsayılan olarak, kaynakların her tür önbelleğe her zaman önbelleğe alınmasına izin verilir.
Cache-Control
başlığını kullanmamak veya yanlış kullanmak, web sitenizin güvenliğini ve kullanıcılarınızın gizliliğini olumsuz yönde etkileyebilir.
Gizli tutmak istediğiniz kişiselleştirilmiş yanıtlar için aşağıdakilerden birini yapmanızı öneririz:
- Aracıların kaynağı önbelleğe almasını engelleyin.
Cache-Control: private
değerini ayarlayın. - Uygun bir ikincil önbelleğe alma anahtarı ayarlayın.
Yanıt, çerezler nedeniyle değişiyorsa (bu durum, çerez kimlik bilgilerini depoladığında ortaya çıkabilir)
Vary: Cookie
değerini ayarlayın.
Bunun neden önemli olduğunu öğrenmek ve aşağıdakileri keşfetmek için okumaya devam edin:
- Farkında olmadığınız güvenlik ve gizlilik sorunları
- Farklı HTTP önbelleği türleri ve yaygın yanlış anlamalar
- Yüksek değerli web siteleri için önerilen işlemler
Önbelleğe ilişkin güvenlik ve gizlilik riskleri
Spectre güvenlik açıklarından kaynaklanan sızıntı kaynakları
Spectre güvenlik açığı, bir sayfanın işletim sistemi işleminin belleğini okumasına olanak tanır. Bu, saldırganların kaynaktan bağımsız verilere yetkisiz olarak erişebileceği anlamına gelir. Sonuç olarak, modern web tarayıcıları bazı özelliklerinin (ör. SharedArrayBuffer
veya yüksek çözünürlüklü zamanlayıcı) kullanımını kaynaklar arası yalıtım içeren sayfalarla sınırlandırdı.
Modern web tarayıcıları Çapraz Kaynak Yerleştirme Politikası'nı (COEP) zorunlu kılar. Bu, kaynakta farklı olan kaynakların aşağıdakilerden biri olmasını sağlar:
- Çerez olmadan istenen herkese açık kaynaklar
- CORS veya CORP üstbilgisi aracılığıyla kaynaklar arası paylaşılmasına açıkça izin verilen kaynaklar
COEP kurulumu, saldırganların Spectre'den yararlanmasını engellemez. Ancak kaynak farklılığı olan kaynakların saldırgan için değerli olmamasına (tarayıcı tarafından herkese açık kaynak olarak yüklendiğinde) veya saldırganla paylaşılmasına izin verilmemesine (CORP: cross-origin
ile paylaşıldığında) olanak tanır.
HTTP önbelleğe alma, Spectre'yi nasıl etkiler?
Cache-Control
başlığı doğru şekilde ayarlanmazsa saldırganlar saldırı gerçekleştirebilir. Örneğin:
- Kimlik bilgisi içeren kaynak önbelleğe alınır.
- Saldırgan, kökler arası erişime kapalı bir sayfa yükler.
- Saldırgan kaynağı tekrar ister.
COEP:credentialless
tarayıcı tarafından ayarlanır, bu nedenle kaynak çerez olmadan getirilir. Ancak önbelleğe alınmış bir yanıt, bunun yerine kimlik bilgisi içeren yanıtı döndürebilir.- Saldırgan daha sonra Spectre saldırısı kullanarak kişiselleştirilmiş kaynağı okuyabilir.
Bir web tarayıcısının HTTP önbelleği, bu tür saldırıların pratikte gerçekleşmesine izin vermese de tarayıcının doğrudan kontrolü dışında ek önbellekler vardır. Bu durum, saldırının başarılı olmasına yol açabilir.
HTTP önbellekleri hakkında yaygın yanlış kanılar
1. Kaynaklar yalnızca tarayıcı tarafından önbelleğe alınır
Genellikle birden fazla önbellek katmanı vardır. Bazı önbellekler tek bir kullanıcıya, bazıları ise birden çok kullanıcıya ayrılmıştır. Bazıları sunucu, bazıları kullanıcı ve bazıları da aracılar tarafından kontrol edilir.
- Tarayıcı önbellekleri. Bu önbellekler, web tarayıcılarında uygulanan tek bir kullanıcıya aittir ve bu kullanıcıya özeldir. Aynı yanıtı birden fazla kez getirmeyerek performansı iyileştirir.
- Yerel proxy. Bu uygulama kullanıcı tarafından yüklenmiş olabilir ancak aracılar (şirket, kuruluş veya internet sağlayıcı) tarafından da yönetilebilir. Yerel proxy'ler genellikle birden fazla kullanıcı için tek bir yanıtı önbelleğe alır. Bu, "herkese açık" bir önbelleğe neden olur. Yerel proxy'lerin birden çok rolü vardır.
- Kaynak sunucu önbelleği / CDN. Bu, sunucu tarafından kontrol edilir. Kaynak sunucu önbellüğünün amacı, aynı yanıtı birden fazla kullanıcı için önbelleğe alarak kaynak sunucudaki yükü azaltmaktır. CDN'lerin hedefleri benzerdir ancak dünya genelinde dağıtılır ve gecikmeyi azaltmak için en yakın kullanıcı grubuna atanır.

2. SSL, aracıların HTTPS kaynaklarını önbelleğe almasını engeller
Birçok kullanıcı, erişim amacıyla (ör. kotalı bağlantı paylaşımı), virüs denetimi veya veri kaybını önleme (DLP) amacıyla yerel olarak yapılandırılmış proxy'leri düzenli olarak kullanır. Ara önbellek TLS müdahalesi gerçekleştiriyor.
Ara önbellek genellikle şirket çalışanlarının iş istasyonlarına yüklenir. Web tarayıcıları, yerel proxy'nin sertifikalarına güvenecek şekilde yapılandırılır.
Sonuç olarak, bazı HTTPS kaynakları bu yerel proxy'ler tarafından önbelleğe alınabilir.
HTTP önbelleği nasıl çalışır?
- Kaynakların varsayılan olarak önbelleğe alınmasına dolaylı olarak izin verilir.
- Birincil önbelleğe alma anahtarı, URL'den ve yöntemden oluşur. (URL, yöntem)
- İkincil önbelleğe alma anahtarı,
Vary
başlığına dahil edilen üstbilgilerdir.Vary: Cookie
, yanıtınCookie
'a bağlı olduğunu gösterir. Cache-Control
başlığı daha ayrıntılı kontrol sağlar.
Web siteniz için önerilen işlemleri yapın
Yüksek trafik alan ve kimliği tanımlayabilecek bilgilerle etkileşime geçen web siteleri de dahil olmak üzere yüksek değerli web sitelerinin geliştiricileri, güvenliği iyileştirmek için hemen harekete geçmelidir.
En büyük risk, bir kaynağa erişim çerezlere göre değiştiğinde ortaya çıkar. Önleyici bir işlem yapılmadıysa aracı önbelleği, çerezlerle istenen bir yanıtı, çerezlerle istenen bir istek için döndürebilir.
Aşağıdaki adımlardan birini uygulamanızı öneririz:
- Aracıların kaynağı önbelleğe almasını engelleyin.
Cache-Control: private
değerini ayarlayın. - Uygun bir ikincil önbelleğe alma anahtarı ayarlayın.
Yanıt, çerezler nedeniyle değişiyorsa (bu durum, çerez kimlik bilgilerini depoladığında ortaya çıkabilir)
Vary: Cookie
değerini ayarlayın.
Özellikle varsayılan davranışı değiştirin: Cache-Control
veya Vary
değerini her zaman tanımlayın.
Göz önünde bulundurulacak diğer noktalar
HTTP önbelleğini kullanan benzer türde başka saldırılar da vardır ancak bu saldırılar kaynak ayırma özelliğinden farklı bir mekanizmaya dayanır. Örneğin, Jake Archibald CORS'ta kazanma başlıklı makalesinde bazı saldırıları açıklamaktadır.
Bu saldırılar, kaynak yanıtının kimlik bilgileriyle istenip istenmediğine bağlı olarak HTTP önbelleğini bölen bazı web tarayıcıları tarafından azaltılır. 2022 itibarıyla Firefox önbelleği bölerken Chrome ve Safari bölemez. Chrome, gelecekte önbelleği bölebilir. Bu saldırıların farklı olduğunu ve üst düzey kaynağa göre bölme işlemini tamamladığını unutmayın.
Bu sorun web tarayıcıları için azaltılabilse bile yerel proxy önbellekleri bu durumdan etkilenmeye devam eder. Bu nedenle, yukarıdaki önerileri uygulamanızı öneririz.
Başlık fotoğrafı: Unsplash'taki Ben Pattinson.