Header keamanan HTTP merupakan baris instruksi yang dikirim server bersama respons halaman web, lalu dibaca dan diterapkan oleh peramban. Dengan menambahkan beberapa baris konfigurasi pada server yang Anda kelola sendiri atau yang Anda miliki izin resminya, banyak celah umum pada sisi peramban dapat ditutup. Pendekatan ini efektif karena bekerja di level transportasi dan rendering, tanpa mengubah seluruh kode aplikasi.

Peramban modern secara default cenderung fleksibel. Ia dapat mengeksekusi skrip dari sumber apa pun, mengirimkan data lewat HTTP non-enkripsi bila diminta, atau mencoba menebak jenis konten yang diterima. Fleksibilitas ini berguna untuk kompatibilitas, tetapi juga membuka peluang penyalahgunaan. Header keamanan berfungsi sebagai aturan yang mempersempit perilaku peramban agar hanya melakukan hal yang Anda izinkan.

Secara teknis, header ini dikirim pada setiap respons HTTP. Peramban yang mendukungnya akan memblokir tindakan yang melanggar kebijakan. Jika peramban tidak mendukung suatu header, ia biasanya mengabaikannya tanpa merusak tampilan. Karena itu, penerapan header keamanan merupakan langkah bertahap yang aman, terukur, dan dapat diverifikasi dari sisi klien menggunakan alat pengembang bawaan peramban.

Content-Security-Policy: Membatasi Sumber Skrip dan Konten

Content-Security-Policy, disingkat CSP, adalah header yang membatasi sumber skrip dan konten lain yang boleh dimuat oleh sebuah halaman. Dengan menetapkan daftar sumber tepercaya, Anda mengurangi dampak serangan injeksi konten karena skrip atau gaya dari sumber luar yang tidak diizinkan tidak akan dieksekusi oleh peramban.

CSP bekerja melalui serangkaian direktif. Directif default-src menetapkan kebijakan dasar bagi sebagian besar jenis sumber daya, sedangkan script-src khusus mengatur skrip. Misalnya, Content-Security-Policy: default-src 'self'; script-src 'self' membatasi sumber daya dan skrip hanya dari asal yang sama dengan situs. Anda juga dapat menambahkan asal tertentu secara eksplisit bila membutuhkan CDN atau layanan pihak ketiga yang dipercaya.

Penerapan CSP sebaiknya dimulai dengan kebijakan yang ketat, lalu dilonggarkan secara selektif berdasarkan kebutuhan nyata. Gunakan mode pelaporan Content-Security-Policy-Report-Only pada tahap pengujian untuk mencatat pelanggaran tanpa memblokir sumber daya. Setelah konfigurasi stabil, aktifkan kebijakan yang memblokir. Hindari penggunaan 'unsafe-inline' dan 'unsafe-eval' kecuali benar-benar diperlukan, karena justru melemahkan perlindungan.

Strict-Transport-Security: Memaksa Peramban Selalu Memakai HTTPS

Strict-Transport-Security, disingkat HSTS, adalah header yang memaksa peramban selalu memakai HTTPS ketika berkomunikasi dengan domain yang dilindungi. Setelah menerima header ini, peramban tidak lagi melakukan permintaan HTTP biasa, melainkan otomatis menaikkan protokol ke HTTPS. Ini menutup celah downgrade yang mencoba memaksa pengguna ke koneksi non-enkripsi.

Header HSTS umumnya berisi nilai max-age yang menyatakan berapa lama, dalam detik, peramban harus mengingat kebijakan. Contohnya, Strict-Transport-Security: max-age=31536000; includeSubDomains; preload menetapkan satu tahun, menerapkan aturan ke subdomain, dan menyatakan kesiapan untuk pra-muat dalam daftar HSTS peramban. Direktif includeSubDomains perlu dipertimbangkan dengan cermat agar seluruh subdomain memang mendukung HTTPS.

HSTS hanya efektif setelah peramban menerima respons melalui koneksi HTTPS yang valid. Karena itu, sertifikat TLS harus terpasang dan terverifikasi terlebih dahulu. Jika Anda mengaktifkan HSTS sebelum semua jalur benar-benar mendukung HTTPS, pengguna dapat terkunci dari situs. Aktifkan bertahap, mulai dari max-age pendek, lalu tingkatkan setelah memastikan tidak ada masalah.

X-Content-Type-Options: nosniff Mencegah Penebakan Tipe Konten

X-Content-Type-Options dengan nilai nosniff mencegah peramban menebak tipe konten saat menerima respons. Tanpa header ini, peramban dapat melakukan sniffing MIME, yaitu menebak jenis file berdasarkan isi, yang kadang berbeda dari deklarasi server. Penebakan ini dapat dieksploitasi untuk membuat peramban menafsirkan file berbahaya sebagai skrip atau gaya yang dapat dieksekusi.

Dengan X-Content-Type-Options: nosniff, peramban akan mematuhi deklarasi tipe konten yang dikirim server melalui header Content-Type. Jika server menyatakan sebuah file sebagai teks biasa, peramban tidak akan mengeksekusinya sebagai skrip. Keberadaan header ini sangat berguna untuk aplikasi yang memungkinkan pengguna mengunggah file atau yang menyajikan konten dari sumber yang tidak sepenuhnya dipercaya.

Konfigurasi ini sederhana dan umumnya tidak menimbulkan dampak negatif pada tampilan normal, asalkan Content-Type sudah ditetapkan dengan benar di seluruh respons. Pastikan endpoint API, file statis, dan unduhan juga mengirim tipe konten yang sesuai. Jika tipe konten salah, nosniff dapat membuat peramban menampilkan file mentah alih-alih merender halaman.

Menerapkan Header pada Server yang Anda Kelola

Penerapan sebaiknya dilakukan pada server yang Anda miliki atau pada lingkungan yang memiliki izin tertulis. Konfigurasi biasanya ditambahkan pada blok server atau virtual host. Pada Nginx, Anda dapat menggunakan direktif add_header di dalam blok server atau location. Pada Apache, modul mod_headers menyediakan direktif Header set atau Header always set.

Contoh potongan konfigurasi Nginx:

add_header Content-Security-Policy "default-src 'self'; script-src 'self'";
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
add_header X-Content-Type-Options "nosniff" always;

Contoh potongan konfigurasi Apache:

Header always set Content-Security-Policy "default-src 'self'; script-src 'self'"
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"
Header always set X-Content-Type-Options "nosniff"

Setelah menerapkan, restart atau reload layanan server, lalu verifikasi dengan alat pengembang peramban pada tab Jaringan. Pastikan header hadir pada respons. Uji juga pada permintaan halaman, skrip, gaya, dan unduhan untuk memastikan tidak ada pelanggaran CSP maupun tipe konten yang salah.

Verifikasi, Iterasi, dan Pembelajaran Lanjutan

Verifikasi sebaiknya mencakup skenario normal, skenario dengan sumber pihak ketiga, dan skenario kesalahan. Catat setiap pelanggaran CSP yang muncul pada konsol peramban. Gunakan laporan untuk memperbaiki konfigurasi tanpa melemahkan perlindungan. Kebijakan yang terlalu longgar memberi rasa aman palsu, sedangkan kebijakan yang terlalu ketat dapat memutus fungsi situs, jadi lakukan iterasi secara bertahap.

Jika Anda ingin mendalami keamanan peramban dan konfigurasi server, Anda dapat merujuk sumber belajar lanjutan seperti kalilinux.net atau kalilinux.info untuk memahami konteks pengujian keamanan yang etis. Pastikan setiap percobaan hanya dilakukan pada sistem yang Anda miliki atau yang memberi izin tertulis, sesuai dengan hukum dan ketentuan yang berlaku.

Header keamanan HTTP bekerja sederhana tetapi memberi dampak besar bila diterapkan konsisten. Mulai dari CSP untuk membatasi sumber skrip dan konten, HSTS untuk memaksa HTTPS, dan X-Content-Type-Options nosniff untuk mencegah penebakan tipe konten. Terapkan secara bertahap, verifikasi secara cermat, dan jadikan konfigurasi ini bagian dari rutinitas pemeliharaan server Anda.