Protokol teks biasa seperti HTTP dapat rentan terhadap serangan penyadapan, yang memungkinkan penyerang membaca konten yang ditransmisikan. Untungnya, Transport Layer Security (TLS) dapat mengenkripsi traffic dan mempersulit penyerang untuk menggunakan data ini jika tertangkap.
Namun, penyerang dapat mengakali TLS dengan memaksa koneksi terenkripsi untuk menggunakan HTTP teks biasa. Untuk mengatasi masalah ini, header respons HTTP Strict Transport Security (HSTS) diperkenalkan yang memaksa browser pengguna untuk mengunjungi situs hanya menggunakan TLS dan tidak kembali ke HTTP teks biasa (untuk waktu yang ditetapkan).
Cara audit Lighthouse gagal
Audit akan menandai masalah berikut dengan header HSTS:
- Jika tidak ada header HSTS yang ditemukan sama sekali.
- Jika salah satu perintah yang direkomendasikan tidak ada (
max-age
,includedSubDomains
,preload
) - Jika durasi untuk perintah
max-age
kurang dari satu tahun (31536000 detik). - Jika terjadi error sintaksis saat mengurai header, seperti perintah yang tidak diketahui.
Mengonfigurasi kebijakan HSTS yang kuat
Konfigurasi header HSTS yang optimal terlihat seperti berikut:
Strict-Transport-Security: max-age=63072000; includeSubDomains; preload
- Perintah
max-age
menentukan jumlah waktu browser pengguna dipaksa untuk mengunjungi situs hanya menggunakan TLS (dalam detik). Setelah waktu tersebut, Anda dapat mengakses situs menggunakan HTTP biasa lagi jika tidak ada header HSTS yang disediakan oleh situs (atau pengalihan sementara dari HTTP ke HTTPS diterapkan). - Menetapkan perintah
includeSubDomains
akan menerapkan header di subdomain URL halaman yang mengirim header pada awalnya. Misalnya, memiliki header HSTS yang dikirim oleh google.com yang menyertakan perintahincludeSubDomains
juga akan menerapkan header HSTS di mail.google.com. - Menetapkan perintah
preload
dan mengirimkan domain ke layanan pramuat HSTS akan mengompilasi domain ke dalam biner browser yang menggunakan daftar HSTS yang dipramuat (bukan hanya Google Chrome).
Ada beberapa risiko saat meluncurkan header HSTS. Setiap fitur yang memerlukan koneksi HTTP yang tidak dienkripsi akan secara efektif rusak selama waktu yang ditetapkan dalam perintah max-age
. Mungkin bahkan lebih lama jika perintah preload
diterapkan.
Untuk menurunkan risiko yang terkait dengan peluncuran, sebaiknya gunakan pendekatan bertahap:
Mulai dengan
max-age
kecil dan hanya tambahkanincludeSubDomains
(tanpapreload
):max-age=3600; includeSubDomains
Setelah beberapa periode tunggu (misalnya, satu minggu) tanpa masalah yang dilaporkan, naikkan
max-age
, misalnya:max-age=604800; includeSubDomains
Jika fase awal ini berhasil selama jangka waktu yang lama (misalnya, tiga bulan), situs dan subdomainnya harus ditambahkan ke daftar pramuat HSTS dan perintah
preload
harus ditambahkan.max-age=63072000; includeSubDomains; preload