Melupakan atau menyalahgunakan header Cache-Control dapat berdampak negatif pada keamanan situs dan privasi pengguna Anda.
Secara default, resource selalu diizinkan untuk di-cache oleh jenis cache apa pun.
Tidak menggunakan atau menyalahgunakan header Cache-Control
dapat berdampak negatif pada keamanan situs dan privasi pengguna Anda.
Untuk tanggapan yang dipersonalisasi yang ingin Anda rahasiakan, sebaiknya:
- Mencegah perantara menyimpan resource ke dalam cache. Tetapkan
Cache-Control: private
. - Tetapkan kunci cache sekunder yang sesuai.
Jika respons bervariasi karena cookie—yang dapat terjadi saat cookie menyimpan kredensial—tetapkan
Vary: Cookie
.
Baca terus untuk mempelajari alasan pentingnya hal ini dan menemukan:
- Masalah keamanan dan privasi yang mungkin tidak Anda ketahui
- Berbagai jenis cache HTTP dan kesalahpahaman umum
- Tindakan yang disarankan untuk situs bernilai tinggi
Risiko keamanan dan privasi terkait cache
Resource yang bocor dari kerentanan Spectre
Kerentanan Spectre
memungkinkan halaman membaca memori proses OS. Artinya, penyerang dapat
mendapatkan akses yang tidak sah ke data lintas origin. Akibatnya, browser web
modern telah membatasi penggunaan beberapa fiturnya—seperti
SharedArrayBuffer
atau timer resolusi tinggi—untuk
halaman dengan isolasi
lintas-asal.
Browser web modern menerapkan Kebijakan Penyemat Lintas Asal (COEP). Hal ini memastikan resource lintas origin adalah:
- Resource publik, yang diminta tanpa cookie
- Resource yang secara eksplisit diizinkan untuk dibagikan lintas-asal, melalui CORS atau header CORP
Penyiapan COEP tidak mencegah penyerang mengeksploitasi Spectre. Namun, hal ini
memastikan resource lintas-asal tidak berharga bagi penyerang (saat dimuat
oleh browser sebagai resource publik) atau diizinkan untuk dibagikan kepada penyerang (saat dibagikan dengan
CORP: cross-origin
).
Bagaimana pengaruh caching HTTP terhadap Spectre?
Jika header Cache-Control
tidak ditetapkan dengan benar, penyerang dapat menjalankan
serangan. Contoh:
- Resource dengan kredensial di-cache.
- Penyerang memuat halaman yang diisolasi lintas origin.
- Penyerang meminta resource lagi.
COEP:credentialless
ditetapkan oleh browser, sehingga resource diambil tanpa cookie. Namun, cache dapat menampilkan respons kredensial.- Penyerang kemudian dapat membaca resource yang dipersonalisasi menggunakan serangan Spectre.
Meskipun cache HTTP browser web tidak mengizinkan jenis serangan ini terjadi dalam praktiknya, cache tambahan ada di luar kontrol langsung browser. Hal ini dapat menyebabkan serangan ini berhasil.
Kesalahpahaman umum tentang cache HTTP
1. Resource hanya di-cache oleh browser
Sering kali ada beberapa lapisan cache. Beberapa cache dikhususkan untuk satu pengguna, beberapa untuk beberapa pengguna. Beberapa dikontrol oleh server, beberapa oleh pengguna, dan beberapa oleh perantara.
- Cache browser. Cache ini dimiliki dan didedikasikan untuk satu pengguna, yang diterapkan di browser web mereka. Cache meningkatkan performa dengan menghindari pengambilan respons yang sama beberapa kali.
- Proxy lokal. Aplikasi ini mungkin telah diinstal oleh pengguna, tetapi juga dapat dikelola oleh perantara: perusahaan, organisasi, atau penyedia internet mereka. Proxy lokal sering kali meng-cache satu respons untuk beberapa pengguna, yang merupakan cache "publik". Proxy lokal memiliki beberapa peran.
- Cache server asal / CDN. Hal ini dikontrol oleh server. Tujuan cache server Origin adalah mengurangi beban pada server origin dengan meng-cache respons yang sama untuk beberapa pengguna. Sasaran CDN serupa, tetapi tersebar di seluruh dunia dan ditetapkan ke kumpulan pengguna terdekat untuk mengurangi latensi.

2. SSL mencegah perantara menyimpan resource HTTPS ke dalam cache
Banyak pengguna secara rutin menggunakan proxy yang dikonfigurasi secara lokal, baik untuk tujuan akses (seperti berbagi koneksi berbayar), pemeriksaan virus, maupun untuk tujuan pencegahan kebocoran data (DLP). Cache perantara melakukan intersepsi TLS.
Cache perantara sering kali diinstal di workstation karyawan perusahaan. Browser web dikonfigurasi untuk memercayai sertifikat proxy lokal.
Pada akhirnya, beberapa resource HTTPS dapat di-cache oleh proxy lokal ini.
Cara kerja cache HTTP
- Resource secara implisit diizinkan untuk di-cache secara default.
- Kunci cache utama terdiri dari URL dan metode. (URL, metode)
- Kunci cache sekunder adalah header yang disertakan dalam header
Vary
.Vary: Cookie
menunjukkan bahwa respons bergantung padaCookie
. - Header
Cache-Control
memberikan kontrol yang lebih terperinci.
Lakukan tindakan yang direkomendasikan ini untuk situs Anda
Developer situs bernilai tinggi, yang mencakup situs dengan traffic tinggi dan situs yang berinteraksi dengan informasi identitas pribadi, harus segera bertindak untuk meningkatkan keamanan.
Risiko terbesar terjadi saat akses ke resource bervariasi bergantung pada cookie. Cache perantara dapat menampilkan respons yang diminta dengan cookie untuk permintaan yang tidak diminta jika tidak ada tindakan pencegahan yang dilakukan.
Sebaiknya Anda melakukan salah satu langkah berikut:
- Mencegah perantara menyimpan resource ke dalam cache. Tetapkan
Cache-Control: private
. - Tetapkan kunci cache sekunder yang sesuai.
Jika respons bervariasi karena cookie—yang dapat terjadi saat cookie menyimpan kredensial—tetapkan
Vary: Cookie
.
Secara khusus, ubah perilaku default: selalu tentukan Cache-Control
atau
Vary
.
Pertimbangan tambahan
Ada jenis serangan lain yang serupa menggunakan cache HTTP, tetapi serangan tersebut bergantung pada mekanisme yang berbeda dari isolasi lintas-asal. Misalnya, Jake Archibald menjelaskan beberapa serangan dalam Cara memenangkan CORS.
Serangan ini dimitigasi oleh beberapa browser web yang memisahkan cache HTTP-nya bergantung pada apakah respons resource diminta dengan kredensial atau tidak. Mulai tahun 2022, Firefox membagi cache, sedangkan Chrome dan Safari tidak. Chrome mungkin memisahkan cache pada masa mendatang. Perhatikan bahwa serangan ini berbeda dan komplementer dengan memisahkannya menurut origin level teratas.
Meskipun masalah ini dapat dimitigasi untuk browser web, masalah tersebut akan tetap ada di cache proxy lokal. Oleh karena itu, sebaiknya Anda tetap mengikuti rekomendasi di atas.
Foto header oleh Ben Pattinson di Unsplash.