Protokol teks biasa, seperti HTTP, dapat rentan terhadap serangan menguping, di mana penyerang dapat membaca konten yang ditransmisikan. Transport Layer Security (TLS) dapat mengenkripsi traffic dan membuat penyerang jauh lebih sulit menggunakan data ini jika diambil.
Namun, penyerang dapat mengakali TLS dengan memaksa koneksi terenkripsi menggunakan HTTP teks biasa. Untuk mengatasi masalah ini, Anda dapat menggunakan header respons HTTP Strict Transport Security (HSTS). HSTS memaksa browser pengguna untuk mengunjungi situs menggunakan TLS, dan tidak mengizinkannya kembali ke HTTP teks biasa selama jangka waktu tertentu.
Penyebab kegagalan audit Lighthouse
Audit menandai masalah berikut pada header HSTS:
- Jika tidak ada header HSTS yang ditemukan sama sekali.
- Jika salah satu perintah yang direkomendasikan tidak ada (
max-age,includeSubDomains,preload) - Jika durasi untuk perintah
max-agekurang dari satu tahun (31536000 detik). - Jika ada error sintaksis saat mengurai header, seperti perintah yang tidak diketahui.
Mengonfigurasi kebijakan HSTS yang kuat
Konfigurasi header HSTS yang optimal akan terlihat seperti berikut:
Strict-Transport-Security: max-age=63072000; includeSubDomains; preload
- Direktif
max-agemenentukan jangka waktu browser pengguna dipaksa untuk membuka situs hanya menggunakan TLS (dalam detik). Setelah waktu berlalu, pengguna dapat membuka situs dengan HTTP biasa lagi jika tidak ada header HSTS yang disediakan oleh situs (atau pengalihan sementara dari HTTP ke HTTPS). - Menyetel direktif
includeSubDomainsakan menerapkan header di semua subdomain URL halaman yang mengirim header pada awalnya. Misalnya, header HSTS yang dikirim olehgoogle.comyang menyertakan direktifincludeSubDomainsakan menerapkan header HSTS dimail.google.com. - Menyetel direktif
preloaddan mengirimkan domain ke layanan pramuat HSTS akan mengompilasi domain ke dalam biner browser yang menggunakan daftar HSTS yang dipramuat. Hal ini berlaku untuk lebih dari Google Chrome.
Ada beberapa risiko saat meluncurkan header HSTS. Setiap fitur yang memerlukan koneksi HTTP yang tidak terenkripsi akan rusak selama waktu yang ditetapkan dalam direktif max-age. Mungkin lebih lama lagi jika perintah preload diterapkan.
Untuk mengurangi risiko yang terkait dengan peluncuran, sebaiknya gunakan pendekatan bertahap:
Mulai dengan
max-agekecil dan hanya tambahkanincludeSubDomains(tanpapreload):max-age=3600; includeSubDomainsSetelah periode tunggu (seperti satu minggu) tanpa masalah yang dilaporkan, tingkatkan
max-age. Contoh:max-age=604800; includeSubDomainsJika fase awal ini berhasil selama jangka waktu yang lama (seperti tiga bulan), situs dan subdomainnya harus ditambahkan ke daftar pra-muat HSTS dan direktif
preloadharus ditambahkan.max-age=63072000; includeSubDomains; preload