Security

Security Headers untuk Website: Mana yang Penting dan Kenapa?

Panduan memahami HTTP security headers seperti CSP, HSTS, Referrer-Policy, dan X-Content-Type-Options tanpa sekadar menyalin konfigurasi.

KKXID Editorial··3 menit baca
Ilustrasi sampul artikel Security Headers untuk Website: Mana yang Penting dan Kenapa? dengan desain teknologi KKXID
On This Page — Daftar Isi

Security Headers untuk Website: Mana yang Penting dan Kenapa?

Sebuah website bisa terlihat rapi, cepat, dan sudah menggunakan HTTPS, tetapi masih memiliki konfigurasi browser yang terlalu longgar. Di sinilah HTTP security headers ikut berperan. Bentuknya hanya beberapa baris respons server, tetapi setiap baris memberi instruksi tambahan kepada browser.

Perlu diingat, header bukan pengganti validasi input, update dependensi, atau desain aplikasi yang aman. Ia adalah lapisan perlindungan tambahan, bukan tameng yang menyelesaikan semua persoalan.

Mulai dari X-Content-Type-Options

Header berikut termasuk yang paling mudah diterapkan:

X-Content-Type-Options: nosniff

Tujuannya membatasi perilaku browser menebak jenis konten yang berbeda dari MIME type yang dikirim server. Untuk aplikasi modern, respons aset seharusnya sudah punya Content-Type yang benar. nosniff membantu menghindari perilaku penafsiran yang tidak diharapkan pada konteks tertentu.

Mengendalikan informasi referer

Ketika seseorang mengklik tautan menuju situs lain, browser dapat mengirim informasi dari halaman asal. Kebijakan berikut sering menjadi pilihan dasar yang masuk akal:

Referrer-Policy: strict-origin-when-cross-origin

Dengan kebijakan ini, tautan lintas origin umumnya tidak membawa seluruh path halaman. Perhatikan bahwa kebutuhan analitik dan integrasi tertentu tetap perlu diuji, terutama jika kamu sebelumnya bergantung pada data referer yang sangat rinci.

Mencegah website ditampilkan dalam frame

Kalau website tidak pernah perlu tampil di dalam iframe milik pihak lain, kamu dapat membatasi embedding menggunakan kebijakan:

X-Frame-Options: DENY

Pendekatan modern yang lebih fleksibel tersedia melalui Content-Security-Policy: frame-ancestors 'none'. Dua mekanisme ini berurusan dengan risiko seperti clickjacking. Pilih konfigurasi sesuai dukungan browser dan kebutuhan aplikasi; jangan pasang larangan jika memang ada fitur sah yang mengandalkan iframe.

Content Security Policy butuh perhatian khusus

CSP memungkinkan kita menentukan dari mana skrip, style, gambar, dan frame dapat dimuat. Secara konsep, prinsipnya adalah hanya izinkan sumber yang benar-benar dibutuhkan.

Masalahnya, CSP yang terlalu ketat dapat memblokir komentar, analytics, atau script AdSense. Sebaliknya, CSP yang terlalu permisif kehilangan banyak manfaat. Karena itu, mulailah dari mode Content-Security-Policy-Report-Only, amati laporan, lalu buat kebijakan yang benar-benar cocok dengan situs.

Hindari sekadar menambahkan unsafe-inline atau mengizinkan seluruh domain secara luas hanya agar error browser menghilang. Lebih baik perbaiki cara script dimuat.

HSTS bukan pengaturan coba-coba

Strict-Transport-Security memberi tahu browser agar koneksi ke domain menggunakan HTTPS selama periode tertentu. Ini bagus ketika HTTPS sudah benar di seluruh bagian situs, tetapi bisa merepotkan kalau sertifikat atau subdomain belum siap.

Jangan langsung mengaktifkan includeSubDomains atau preload hanya karena terlihat aman. Pastikan seluruh domain terkait memang siap menggunakan HTTPS secara konsisten.

Cara mengecek hasilnya

Buka Developer Tools di browser, pilih tab Network, dan periksa response headers dari halaman yang dimuat. Lakukan pula pengujian fungsi: pencarian, komentar GitHub, gambar, formulir, dan integrasi lain.

Website aman bukan yang memiliki daftar header paling panjang. Website aman adalah yang konfigurasinya dipahami, diuji, dan dipelihara ketika kebutuhan berubah.

Bacaan dan sumber lanjutan

Artikel terkait

Diskusi & komentar

Komentar menggunakan GitHub Discussions. Untuk menulis komentar, masuk menggunakan akun GitHub kamu. Jaga diskusi tetap sopan dan sesuai topik.

Komentar melalui GitHub sedang disiapkan. Diskusi akan tersedia setelah repositori GitHub Discussions dihubungkan.