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

Önbellek Kontrolü başlığının unutulması veya yanlış kullanılması, 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 herhangi bir önbellek türü tarafından önbelleğe alınmasına her zaman izin verilir. Cache-Control üstbilgisinin kullanılmaması veya yanlış kullanılması, web sitenizin güvenliğini ve kullanıcılarınızın gizliliğini olumsuz yönde etkileyebilir.

Gizli kalmasını istediğiniz kişiselleştirilmiş yanıtlar için aşağıdakilerden birini yapmanızı öneririz:

  • Aracıların kaynağı önbelleğe almasını önleyin. Cache-Control: private ayarla.
  • Uygun bir ikincil önbellek anahtarı ayarlayın. Yanıt çerezlere bağlı olarak değişiyorsa (çerez kimlik bilgilerini depoladığında bu durum meydana gelebilir) Vary: Cookie ayarını yapın.

Bunun neden önemli olduğunu öğrenmek ve aşağıdakileri keşfetmek için okumaya devam edin:

  1. Farkında olmayabileceğiniz güvenlik ve gizlilik sorunları
  2. Farklı HTTP önbellek türleri ve yaygın yanlış kanılar
  3. Yüksek değere sahip web siteleri için önerilen işlemler

Spectre güvenlik açıklarından sızan kaynaklar

Spectre güvenlik açığı, bir sayfanın işletim sistemi işleminin belleğini okumasına izin verir. Bu, bir saldırganın kaynaklar arası verilere yetkisiz erişim elde edebileceği anlamına gelir. Sonuç olarak, modern web tarayıcıları SharedArrayBuffer veya yüksek çözünürlüklü zamanlayıcı gibi bazı özelliklerinin kökenler arası izolasyon uygulanan sayfalarla kullanımını kısıtlamıştır.

Modern web tarayıcıları Çapraz Kaynak Yerleştirme Politikası (COEP) uygular. Bu, kaynaklar arası kaynakların şunlardan birini karşılamasını sağlar:

  • Çerezler olmadan talep edilen herkese açık kaynaklar
  • CORS veya CORP başlığı aracılığıyla kaynaklar arasında açıkça paylaşılmasına izin verilen kaynaklar

COEP kurulumu, bir saldırganın Spectre'ı kötüye kullanmasını engellemez. Bununla birlikte, kaynaklar arası kaynakların saldırgan için değerli olmamasını (tarayıcı tarafından herkese açık kaynak olarak yüklendiğinde) veya saldırganla paylaşılmasına (CORP: cross-origin ile paylaşıldığında) izin verilmesini sağlar.

HTTP önbelleğe alma Spectre'ı nasıl etkiler?

Cache-Control başlığı doğru şekilde ayarlanmazsa saldırgan bir saldırı gerçekleştirebilir. Örneğin:

  1. Kimliği doğrulanmış 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. Dolayısıyla kaynak, çerezler olmadan getirilir. Ancak bir önbellek, bunun yerine "credentialled" yanıtı döndürebilir.
  5. Bunun ardından saldırgan, Spectre saldırısı kullanarak kişiselleştirilmiş kaynağı okuyabilir.

Bir web tarayıcısının HTTP önbelleği pratikte bu tür saldırıların yapılmasına izin vermese de, tarayıcının doğrudan kontrolünün dışında ek önbellekler bulunur. Bu, saldırının başarılı olmasını sağlayabilir.

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ı bulunur. Bazı önbellekler tek bir kullanıcıya, bazıları da birden fazla kullanıcıya ayrılmıştır. Bunların bazıları sunucu, bazıları kullanıcı, bazıları da aracılar tarafından kontrol edilir.

  • Tarayıcı önbellekleri. Bu önbellekler, kullanıcının web tarayıcısında uygulanır ve tek bir kullanıcıya aittir ve ona özeldir. Aynı yanıtı birden çok kez almaktan kaçınarak performansı artırırlar.
  • Yerel proxy. Bu uygulama, kullanıcı tarafından yüklenmiş olabilir, ancak aracılar (şirket, kuruluş veya internet sağlayıcısı) tarafından da yönetilebilir. Yerel proxy'ler genellikle birden fazla kullanıcı için tek bir yanıtı önbelleğe alır, bu da "genel" bir önbellek oluşturur. Yerel proxy'lerin birden fazla rolü vardır.
  • Kaynak sunucu önbelleği / CDN. Bu işlem sunucu tarafından kontrol edilir. Kaynak sunucu önbelleğinin hedefi, birden çok kullanıcı için aynı yanıtı önbelleğe alarak kaynak sunucudaki yükü azaltmaktır. CDN'nin hedefleri benzerdir ancak tüm dünyaya yayılır ve gecikmeyi azaltmak için en yakın kullanıcı kümesine atanır.
Genellikle tarayıcı ile sunucu arasında birden çok önbellek katmanı bulunur.
Tarayıcı ile sunucu arasında çeşitli önbellek katmanları olabilir. Örneğin, bir sunucu önbelleğine, ardından CDN ve tarayıcı önbelleğine rastlayabilirsiniz. CDN ve tarayıcı önbelleği arasında yerel bir proxy kurulumu da olabilir.

2. SSL, aracıların HTTPS kaynaklarını önbelleğe almasını önler

Çoğu kullanıcı, erişim amacıyla (sayaçlı bağlantıyı paylaşmak gibi), virüs denetlemesi veya veri kaybını önleme (DLP) gibi amaçlarla düzenli olarak yerel olarak yapılandırılmış proxy'leri kullanır. Ara önbellek TLS müdahalesi gerçekleştirmektedir.

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ılmıştı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 dolaylı olarak önbelleğe alınmasına izin verilir.
  • Birincil önbellek anahtarı, URL ve yöntemden oluşur. (URL, yöntem)
  • İkincil önbellek anahtarı, Vary üstbilgisine dahil edilen üst bilgilerdir. Vary: Cookie, yanıtın Cookie öğesine bağlı olduğunu belirtir.
  • Cache-Control başlığı daha hassas kontrol sağlar.

Yüksek trafiğe sahip web siteleri ve kişisel verileri ifşa edici bilgilerle etkileşimde bulunan web siteleri dahil olmak üzere yüksek değerli web sitelerinin geliştiricileri güvenliği artırmak için hemen harekete geçmelidir.

En büyük risk, bir kaynağa erişimin çerezlere bağlı olarak farklılık göstermesiyle ortaya çıkar. Bir aracı önbellek, önleyici herhangi bir işlem yapılmadığı takdirde olmayan bir istek için çerezlerle istenen bir yanıt döndürebilir.

Aşağıdaki adımlardan birini uygulamanızı öneririz:

  • Aracıların kaynağı önbelleğe almasını önleyin. Cache-Control: private ayarla.
  • Uygun bir ikincil önbellek anahtarı ayarlayın. Yanıt çerezlere bağlı olarak değişiyorsa (çerez kimlik bilgilerini depoladığında bu durum meydana gelebilir) Vary: Cookie ayarını yapın.

Özellikle, varsayılan davranışı değiştirin: her zaman Cache-Control veya Vary değerini tanımlayın.

Göz önünde bulundurulması gereken diğer noktalar

HTTP önbelleğini kullanan benzer başka saldırı türleri de vardır, ancak bu saldırılar çapraz kaynak izolasyonundan farklı bir mekanizmaya dayanır. Örneğin Jake Archibald, CORS'da nasıl kazanılır? bölümünde bazı saldırıları açıklar.

Kaynak yanıtının kimlik bilgileriyle istenip istenmemesine bağlı olarak HTTP önbelleklerini bölen bazı web tarayıcıları bu saldırıların etkisini azaltır. 2022'den itibaren Firefox önbelleği bölerken Chrome ve Safari yapmıyor. Chrome, gelecekte önbelleği bölebilir. Bu saldırıların, üst düzey kaynağa göre bölmek için farklı ve tamamlayıcı olduğunu unutmayın.

Web tarayıcılarında bu sorun azaltılsa bile sorun, yerel proxy önbelleklerinde kalır. Bu nedenle, yine de yukarıdaki önerileri uygulamanızı öneririz.


Başlık fotoğrafı, gönderen: Ben Pattinson, Unsplash.