Menggunakan kebijakan HSTS yang kuat

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

Peringatan audit Lighthouse bahwa tidak ada header respons HSTS yang ditemukan.
Laporan Lighthouse memperingatkan bahwa tidak ada header respons HSTS yang ditemukan.

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 perintah includeSubDomains 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:

  1. Mulai dengan max-age kecil dan hanya tambahkan includeSubDomains (tanpa preload):

    max-age=3600; includeSubDomains
    
  2. Setelah beberapa periode tunggu (misalnya, satu minggu) tanpa masalah yang dilaporkan, naikkan max-age, misalnya:

    max-age=604800; includeSubDomains
    
  3. 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