Zapomnienie o nagłówku Cache-Control lub jego niewłaściwe użycie może negatywnie wpłynąć na bezpieczeństwo witryny i prywatność użytkowników.
Domyślnie zasoby mogą być zawsze umieszczane w pamięci podręcznej przez dowolny typ pamięci podręcznej.
Nieużywanie nagłówka Cache-Control
lub jego niewłaściwe użycie może negatywnie wpłynąć na bezpieczeństwo witryny i prywatność użytkowników.
W przypadku spersonalizowanych odpowiedzi, które chcesz zachować jako prywatne, zalecamy:
- zapobiegać pośrednikom w przechowywaniu zasobu w pamięci podręcznej; Ustaw
Cache-Control: private
. - Ustaw odpowiedni klucz pamięci podręcznej.
Jeśli odpowiedź różni się ze względu na pliki cookie (co może się zdarzyć, gdy plik cookie przechowuje dane logowania), ustaw
Vary: Cookie
.
Czytaj dalej, aby dowiedzieć się, dlaczego to ważne i co jeszcze możesz zrobić:
- Problemy z bezpieczeństwem i prywatnością, o których możesz nie wiedzieć
- Różne typy pamięci podręcznej HTTP i częste nieporozumienia
- Zalecane działania dotyczące witryn o dużej wartości
Zagrożenia związane z bezpieczeństwem i prywatnością związane z wykorzystaniem pamięci podręcznej
Zasoby z lukami w zabezpieczeniach Spectre
Brak zabezpieczeń Spectre pozwala stronie odczytywać pamięć procesu systemu operacyjnego. Oznacza to, że atakujący może uzyskać nieautoryzowany dostęp do danych z wielu witryn. W związku z tym nowoczesne przeglądarki internetowe ograniczają dostępność niektórych funkcji, takich jak SharedArrayBuffer
lub minutnik w wysokiej rozdzielczości, na stronach z izolacją między domenami.
Nowoczesne przeglądarki internetowe stosują zasady umieszczania zasobów z innych domen (COEP). Dzięki temu zasoby między domenami są:
- Publiczne zasoby, żądane bez plików cookie
- Zasoby, które mogą być udostępniane między domenami za pomocą CORS lub nagłówka CORP.
Konfiguracja COEP nie uniemożliwia atakującemu wykorzystania Spectre. Zapewnia jednak, że zasoby z innych źródeł nie są wartościowe dla atakującego (gdy są wczytywane przez przeglądarkę jako zasoby publiczne) lub że nie można ich udostępniać atakującemu (gdy są udostępniane przez CORP: cross-origin
).
Jak buforowanie HTTP wpływa na Spectre?
Jeśli nagłówek Cache-Control
nie jest prawidłowo skonfigurowany, atakujący może przeprowadzić atak. Na przykład:
- Zasób z danymi logowania jest przechowywany w pamięci podręcznej.
- Atakujący wczytuje stronę izolowaną od zasobów z innych domen.
- Atakujący ponownie wysyła żądanie zasobu.
COEP:credentialless
jest ustawiany przez przeglądarkę, więc zasób jest pobierany bez plików cookie. Jednak pamięć podręczna może zwrócić odpowiedź z zalogowanymi danymi.- Następnie atakujący może odczytać spersonalizowany zasób za pomocą ataku Spectre.
Chociaż pamięć podręczna HTTP przeglądarki internetowej nie pozwala na przeprowadzanie tego typu ataków w praktyce, poza kontrolą przeglądarki istnieją dodatkowe pamięci podręczne. Może to doprowadzić do powodzenia ataku.
Typowe nieporozumienia dotyczące pamięci podręcznej HTTP
1. Zasoby są przechowywane w pamięci podręcznej tylko przez przeglądarkę
Często występuje wiele warstw pamięci podręcznej. Niektóre pamięci podręczne są przeznaczone dla jednego użytkownika, a inne dla wielu użytkowników. Niektóre są kontrolowane przez serwer, inne przez użytkownika, a jeszcze inne przez pośredników.
- Pamięć podręczna przeglądarki. Te pamięci podręczne są własnością jednego użytkownika i są przeznaczone dla niego. Są one wdrażane w jego przeglądarce. Poprawiają one wydajność, ponieważ zapobiegają wielokrotnemu pobieraniu tej samej odpowiedzi.
- Lokalny serwer proxy. Mogą być one zainstalowane przez użytkownika, ale mogą też być zarządzane przez pośredników: firmę, organizację lub dostawcę internetu. Serwery proxy lokalne często przechowują w pamięci podręcznej pojedynczą odpowiedź dla wielu użytkowników, co stanowi „publiczną” pamięć podręczną. Serwery proxy lokalne pełnią wiele ról.
- Pamięć podręczna serwera źródłowego / CDN. Jest to kontrolowane przez serwer. Celem pamięci podręcznej serwera źródłowego jest zmniejszenie obciążenia serwera źródłowego przez przechowywanie w pamięci podręcznej tej samej odpowiedzi dla wielu użytkowników. Cele sieci CDN są podobne, ale rozproszone po całym świecie i przypisane do najbliższego zbioru użytkowników, aby skrócić czas oczekiwania.

2. SSL uniemożliwia pośrednikom buforowanie zasobów HTTPS
Wielu użytkowników regularnie korzysta z lokalnie skonfigurowanych serwerów proxy, np. w celu uzyskania dostępu (np. udostępniania połączenia z licznikiem), kontroli wirusów lub zapobiegania utracie danych (DLP). Pamięć podręczna pośrednia wykonuje przechwytywanie TLS.
Pośrednia pamięć podręczna jest często instalowana na stacjach roboczych pracowników firmy. Przeglądarki internetowe są skonfigurowane tak, aby ufać certyfikatom lokalnego serwera proxy.
Ostatecznie niektóre zasoby HTTPS mogą zostać zapisane w pamięci podręcznej przez te lokalne serwery proxy.
Jak działa pamięć podręczna HTTP
- Zasoby są domyślnie dodawane do pamięci podręcznej.
- Klucz głównej pamięci podręcznej składa się z adresu URL i metody. (URL, metoda)
- Klucz pamięci podręcznej dodatkowej to nagłówki zawarte w nagłówku
Vary
.Vary: Cookie
wskazuje, że odpowiedź zależy odCookie
. - Nagłówek
Cache-Control
zapewnia bardziej szczegółową kontrolę.
Podejmij te zalecane działania dotyczące Twojej witryny
Deweloperzy witryn o wysokiej wartości, w tym witryn z dużą liczbą użytkowników oraz witryn, które zawierają informacje umożliwiające identyfikację osób, powinni już teraz podjąć działania w celu zwiększenia bezpieczeństwa.
Największe ryzyko występuje, gdy dostęp do zasobu zmienia się w zależności od plików cookie. Jeśli nie zostaną podjęte żadne działania zapobiegawcze, pośrednia pamięć podręczna może zwrócić odpowiedź, która została poproszona o pliki cookie, na żądanie, które nie zostało wysłane.
Zalecamy wykonanie jednej z tych czynności:
- zapobiegać pośrednikom w przechowywaniu zasobu w pamięci podręcznej; Ustaw
Cache-Control: private
. - Ustaw odpowiedni klucz pamięci podręcznej.
Jeśli odpowiedź różni się ze względu na pliki cookie (co może się zdarzyć, gdy plik cookie przechowuje dane logowania), ustaw
Vary: Cookie
.
W szczególności zmień domyślne zachowanie: zawsze definiuj Cache-Control
lub Vary
.
Uwagi dodatkowe
Istnieją inne, podobne typy ataków wykorzystujących pamięć podręczną HTTP, ale opierają się one na innym mechanizmie niż izolacja między domenami. Na przykład Jake Archibald opisuje niektóre ataki w artykule Jak wygrać w CORS.
Ataki te są ograniczane przez niektóre przeglądarki internetowe, które dzielą pamięć podręczną HTTP w zależności od tego, czy żądanie odpowiedzi na zasób zostało wysłane z użyciem poświadczeń. Od 2022 r. Firefox dzieli pamięć podręczną, a Chrome i Safari tego nie robią. W przyszłości Chrome może podzielić pamięć podręczną. Pamiętaj, że te ataki są różne i uzupełniają dzielenie według najwyższego poziomu źródła.
Nawet jeśli uda się ograniczyć ten problem w przypadku przeglądarek internetowych, problem pozostanie w miejscowych pamięciach podręcznych serwerów proxy. Dlatego nadal zalecamy stosowanie się do powyższych zaleceń.
Zdjęcie nagłówka autorstwa Bena Pattinsona z Unsplash.