Memahami Trusted Types dan CSP untuk Mencegah XSS

Content-Security-Policy (CSP) trusted-types dan require-trusted-types-for adalah mekanisme keamanan tingkat lanjut yang dirancang untuk mengamankan aplikasi web dari kerentanan Cross-Site Scripting (XSS) berbasis DOM. Mekanisme ini bekerja dengan mengontrol data yang diteruskan ke fungsi sink DOM XSS seperti pengaturan Element.innerHTML, memastikan bahwa fungsi tersebut hanya menerima nilai aman yang dibuat oleh kebijakan (policy) yang telah disetujui sebelumnya.

Komponen Utama CSP Trusted Types

Penerapan keamanan Trusted Types pada HTTP header melibatkan dua arahan (directive) utama yang saling melengkapi untuk mengontrol pembuatan kebijakan dan penggunaan data pada DOM sink.

Arahan CSP Fungsi Utama
trusted-types Menentukan daftar izin (allowlist) untuk nama kebijakan Trusted Type yang dapat dibuat oleh situs web menggunakan metode trustedTypes.createPolicy().
require-trusted-types-for Menginstruksikan agen pengguna untuk mengontrol data yang diteruskan ke DOM XSS sink (misalnya 'script'), sehingga hanya menerima nilai bertipe yang tidak dapat dipalsukan.

Cara Kerja Teknis dan Penegakan Kebijakan

Ketika direktif require-trusted-types-for 'script' diaktifkan, fungsi-fungsi berbahaya seperti pengisi innerHTML akan secara otomatis menolak input berupa string mentah. Fungsi tersebut hanya akan memproses nilai yang telah dibungkus melalui objek tepercaya (Trusted Type objects) yang dihasilkan oleh fungsi pembuatan kebijakan yang sah.

Untuk mempersiapkan aplikasi sebelum memberlakukan pembatasan secara ketat, pengembang dapat memanfaatkan header respon HTTP Content-Security-Policy-Report-Only. Opsi ini memungkinkan pengujian kebijakan untuk memantau potensi pelanggaran tanpa memblokir fungsionalitas aplikasi secara langsung.

Integrasi dengan Kerangka Kerja Modern

Beberapa kerangka kerja modern telah memberikan dukungan bawaan untuk mempermudah implementasi fitur ini. Sebagai contoh, kerangka kerja Angular telah menyertakan dukungan bawaan untuk Trusted Types sejak versi 11. Pengembang yang menggunakan kerangka kerja tersebut perlu menambahkan tipe tepercaya bernama angular ke dalam direktif trusted-types pada konfigurasi CSP saat menggunakan direktif require-trusted-types-for 'script', di samping beberapa kebijakan bawaan lainnya yang mungkin diperlukan.