HTTP Önbelleğini güncelleyerek güvenliği ve gizliliği artırın

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.

Arthur Sonzogni
Arthur Sonzogni

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:

  1. Farkında olmadığınız güvenlik ve gizlilik sorunları
  2. Farklı HTTP önbelleği türleri ve yaygın yanlış anlamalar
  3. Yüksek değerli web siteleri için önerilen işlemler

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:

  1. Kimlik bilgisi içeren kaynak önbelleğe alınır.
  2. Saldırgan, kökler arası erişime kapalı bir sayfa yükler.
  3. Saldırgan kaynağı tekrar ister.
  4. 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.
  5. 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.
Tarayıcı ile sunucu arasında genellikle birden fazla önbelleğe alma katmanı bulunur.
Tarayıcı ile sunucu arasında çeşitli önbellek katmanları olabilir. Örneğin, bir sunucu önbelleği, ardından bir CDN ve tarayıcı önbelleğiyle karşılaşabilirsiniz. CDN ile tarayıcı önbelleği arasında yerel bir proxy kurulumu da olabilir.

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?

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.