Prefix Cookie __Host- Membatasi Cakupan Cookie

Keamanan cookie tidak hanya bergantung pada nilai yang disimpan. Cakupan menentukan request mana yang dapat membawa cookie dan response mana yang dapat mencoba menggantinya. Untuk cookie sesi sensitif, aturan domain yang luas dapat memberi pengaruh kepada host saudara yang sebenarnya tidak diperlukan aplikasi.

Prefix nama cookie __Host- memberi browser yang mendukungnya seperangkat persyaratan cakupan yang ringkas. Cookie dengan nama berawalan __Host- hanya diterima jika memakai Secure, memiliki Path=/, dan tidak memiliki atribut Domain. Hasilnya adalah cookie khusus host yang tersedia pada seluruh path di host tersebut dan dibatasi ke transport aman.

Set-Cookie: __Host-session=opaque-value; Secure; HttpOnly; Path=/; SameSite=Lax

Prefix ini tidak membuat protokol autentikasi baru. Fungsinya adalah menjadikan beberapa invarian cookie sebagai aturan yang diterapkan browser, bukan sekadar konfigurasi aplikasi.

Tanpa Domain menjadi properti keamanan

Cookie tanpa atribut Domain bersifat khusus host. Browser mengirimkannya kembali hanya ke host yang menetapkannya, dengan tetap mengikuti aturan cookie lainnya.

Cookie domain memiliki jangkauan lebih luas. Sebagai contoh, cookie untuk example.com dapat dikirim ke subdomain yang memenuhi syarat. Desain tertentu memang memerlukannya, tetapi cakupan tersebut juga menambah jumlah host yang masuk ke batas keamanan cookie.

__Host- menolak perluasan itu. Header berikut tidak valid untuk prefix tersebut karena menyertakan Domain:

Set-Cookie: __Host-session=opaque-value; Secure; Domain=example.com; Path=/

Layanan yang membutuhkan satu cookie bersama untuk beberapa host saudara tidak dapat memakai __Host- pada cookie tersebut. Pembatasan ini memang bagian dari kontraknya.

Path harus berada di root

Prefix ini juga mewajibkan Path=/.

Path cookie mengatur pengiriman, tetapi bukan batas otorisasi antara aplikasi yang tidak saling percaya pada host yang sama. Kewajiban memakai root mencegah cookie __Host- tampil sebagai cookie yang terikat host sekaligus terpecah berdasarkan path. Model cakupannya jelas: satu host, transport aman, seluruh path.

Path yang lebih sempit seperti berikut tidak memenuhi kontrak prefix:

Set-Cookie: __Host-session=opaque-value; Secure; Path=/admin

Aplikasi tetap dapat memakai cookie biasa dengan path lebih sempit saat perilaku itu diperlukan. Cookie tersebut hanya tidak memperoleh jaminan __Host- yang diterapkan browser.

Secure wajib digunakan

Cookie __Host- harus memiliki atribut Secure. Atribut itu membatasi pengiriman ke konteks aman sesuai aturan pemrosesan cookie.

Set-Cookie: __Host-session=opaque-value; Secure; HttpOnly; Path=/

Secure diperlukan, tetapi tidak mencakup seluruh perlindungan sesi. HttpOnly tetap merupakan atribut terpisah untuk mencegah akses melalui document.cookie. SameSite tetap menjadi kebijakan terpisah untuk pengiriman cookie lintas situs. Masa berlaku dan invalidasi sesi tetap menjadi tanggung jawab aplikasi.

Prefix ini bekerja bersama kontrol tersebut, bukan menggantikannya.

Prefix mengurangi penyimpangan konfigurasi

Pengaturan cookie sering dibentuk oleh middleware framework, reverse proxy, library autentikasi, dan konfigurasi khusus lingkungan. Kesalahan deployment dapat memperluas cookie biasa secara diam-diam jika header yang dihasilkan masih valid secara sintaksis.

Prefix __Host- memindahkan tiga persyaratan ke pemrosesan browser. Jika response mencoba menetapkan cookie berprefix dengan atribut Domain, tanpa Secure, atau dengan path selain /, browser yang sesuai tidak menyimpannya sebagai cookie tersebut.

Mode kegagalan ini berguna karena konfigurasi yang salah tidak turun secara diam-diam menjadi cookie __Host- dengan cakupan lebih luas. Pengujian deployment tetap perlu memeriksa header Set-Cookie aktual dan perilaku browser; prefix adalah batasan, bukan pengganti verifikasi.

Host saudara tetap menjadi prinsipal terpisah

Pertimbangkan app.example.com dan files.example.com. Jika sesi aplikasi berupa cookie domain untuk example.com, kedua host berada dalam cakupan cookie yang lebih luas. __Host-session khusus host yang dibuat oleh app.example.com tidak memperluas cookie sesi tersebut ke files.example.com.

Pemisahan ini berguna ketika subdomain memiliki operator, stack deployment, atau tingkat kepercayaan konten yang berbeda. Desain tersebut juga mengurangi ketergantungan pada setiap host saudara untuk menjaga integritas cookie sesi.

Prefix ini tidak memisahkan dua aplikasi yang memakai host yang sama. Jika aplikasi yang tidak saling percaya berada pada path berbeda di satu hostname, aturan path cookie tidak mengubah path tersebut menjadi prinsipal keamanan yang kuat. Pemisahan host merupakan batas yang lebih bersih saat aplikasi memerlukan otoritas cookie yang berbeda.

__Secure- memiliki kontrak berbeda

Prefix terkait, __Secure-, mewajibkan Secure, tetapi tidak menetapkan persyaratan khusus host dan root-path seperti __Host-.

Karena itu, __Secure- cocok untuk kasus yang membutuhkan cookie aman berprefix tetapi juga memerlukan atribut Domain atau path lain. Batas cakupannya lebih lemah dan bukan alias untuk __Host-.

Pemilihan keduanya harus mengikuti kebutuhan pengiriman cookie. Sesi lokal pada satu host merupakan kandidat kuat untuk __Host-; cookie yang sengaja dibagikan ke beberapa subdomain tidak dapat memenuhi kontrak tersebut.

Prefix tidak memperbaiki otorisasi aplikasi

Cookie dengan cakupan ketat masih dapat mewakili sesi yang memiliki hak akses berlebihan. Request yang membawa __Host-session tetap memerlukan autentikasi, otorisasi, pertahanan CSRF bila relevan, rotasi sesi yang aman, dan invalidasi di sisi server.

Prefix juga tidak melindungi nilai sesi dari setiap kompromi pada host pemiliknya. Injeksi script, kompromi server, logika siklus hidup sesi yang tidak aman, dan pencurian kredensial memerlukan kontrol pada lapisan masing-masing.

Kontribusinya spesifik: nama cookie menyatakan kontrak cakupan, lalu browser yang mendukungnya menerapkan kontrak tersebut saat cookie ditetapkan. Untuk sesi sensitif yang lokal pada satu host, konvensi nama kecil ini menjadi pengaman terhadap perluasan domain yang tidak disengaja dan atribut cookie yang tidak konsisten.