Alat pengembang · HTML WYSIWYG editor
Sanitasi yang Ditempel HTML: Apa yang Harus Dilucuti Sebelum Mencapai CMS atau Email Anda
· Cara kerjanya
html keamanan pembersihan teks
Menjelaskan fungsi sanitiser HTML, mulai dari tag dan atribut yang diizinkan hingga skrip yang dihapus dan URL yang dinetralkan, dan bagaimana memeriksa markup terlebih dahulu membuat aturan sanitiser lebih mudah untuk ditulis.
Cuplikan yang ditempelkan dan membawa onclick — terbuka dengan risiko tersembunyi dalam masukan teks kaya
Jangkar yang ditempel dapat menyembunyikan onclick di samping tujuan yang tidak berbahaya. ToolAcre menggunakan huruf kecil pada setiap nama atribut dan hanya menyimpan atribut yang dicantumkan secara eksplisit untuk elemen yang diterima, sehingga onclick menghilang bahkan ketika huruf besar/kecilnya diubah. Laporan penghapusan mengidentifikasi pengendali peristiwa tersebut alih-alih menyajikan sumber yang tidak diubah secara diam-diam.
Batas ini beroperasi sebelum tempel kaya disisipkan, saat sumber kembali ke mode visual, sebelum penyalinan, sebelum ekstraksi teks biasa, dan lagi saat membuat dokumen pratinjau. Pengulangan mengurangi bypass yang tidak disengaja di antara tindakan, namun proyek masih menolak untuk menyebut tokenizer yang ditulis tangan sebagai filter XSS tujuan umum.
Mengapa daftar yang diizinkan mengalahkan daftar yang tidak diizinkan — menjelaskan bahwa memberi nama apa yang diizinkan lebih aman daripada mencoba membuat daftar setiap konstruksi berbahaya
Daftar yang diizinkan dimulai dengan memberi nama struktur yang diizinkan: paragraf, judul, elemen sebaris semantik, daftar, daftar deskripsi, kutipan, elemen mirip kode, dan jangkar. Pembungkus biasa yang tidak dikenal kehilangan tagnya sambil tetap mempertahankan teks. Wadah berbahaya seperti skrip, gaya, iframe, formulir, SVG atau MathML juga kehilangan isinya.
Daftar blokir perlu untuk mengantisipasi setiap konstruksi yang berbahaya atau tidak didukung. Daftar yang diizinkan menolak apa yang tidak dipahaminya. Itu adalah pilihan yang tepat untuk keluaran satu editor yang terbatas, namun tetap dibatasi oleh tokenizernya. Pemulihan kesalahan browser HTML5 dapat menghasilkan pohon yang berbeda dari parser yang lebih kecil ketika input yang sengaja disalahgunakan terlibat.
Tag, atribut, dan skema URL — mencakup tiga lapisan filter pembersih, dengan keputusan khas untuk masing-masing lapisan
Penyaringan terjadi pada tiga lapisan. Elemen menentukan kosa kata struktural. Atribut per elemen hanya mengizinkan beberapa nilai seperti link href dan judul, kutipan kutipan, judul singkatan, serta awal dan jenis daftar terurut. Inspeksi URL kemudian mendekode entitas, menghapus kontrol dan spasi dari probe, dan memeriksa skema yang dihasilkan.
Skema yang diterima adalah http, https, mailto, tel dan ftp, ditambah bentuk relatif tanpa skema eksplisit. JavaScript, data, file, blob, vbscript, dan contoh tentang ditolak dalam pengujian. Tautan yang bertahan mendapatkan nilai rel, namun penambahan tersebut bukan pengganti kebijakan destinasi atau tinjauan tautan.
Gaya: hapus, izinkan, atau tulis ulang — membahas penanganan gaya sebaris dan mengapa banyak sistem menghapusnya sepenuhnya
Atribut gaya dihapus secara grosir. Modul ini tidak mencoba mengurai deklarasi, mempertahankan subset yang aman, atau menulis ulang token desain. Kebijakan tersebut menghapus tampilan yang disalin dan permukaan permintaan berbasis CSS secara bersamaan. Atribut kelas, id, dan data juga hilang, menghasilkan markup yang portabel namun sengaja dibuat kurang ekspresif.
Sistem dengan persyaratan gaya asli memerlukan kebijakan peninjauan berbeda. Menambahkan gaya ke daftar yang diizinkan ini tanpa pembersih CSS akan mengubah permukaan keamanannya secara signifikan. Implementasi saat ini menghindari masalah tersebut daripada mengklaim dapat memecahkan masalah keamanan CSS untuk fragmen musuh yang sewenang-wenang.
Contoh praktis: ambil aturan dari daftar izin yang didokumentasikan ToolAcre, bukan perlengkapan khusus Word
Mulailah dengan `<div class="WordSection"><p style="color:red" onclick="x()">Notice <strong>today</strong></p></div>`. Div dibuka, kelas dan gaya tidak dapat bertahan, onclick dihapus, dan paragraf plus elemen kuat tetap ada. Hasilnya mengikuti kebijakan umum tanpa menyatakan aplikasi mana yang menghasilkan pembungkus tersebut.
Tambahkan href javascript dan blok skrip. Jangkar mempertahankan kata-katanya yang terlihat tetapi kehilangan href; skrip dan isi menghilang. Baca alasan yang dilaporkan. Latihan ini membantu menentukan kebijakan server, namun menyalin subset persis ToolAcre secara membabi buta dapat menghilangkan elemen yang diperlukan aplikasi Anda atau mengizinkan URL yang dilarang oleh model ancaman Anda.
Sanitasi sisi server versus sisi klien — menjelaskan mengapa server harus melakukan sanitasi meskipun browser sudah melakukannya
Pemfilteran klien meningkatkan penyusunan lokal tetapi tidak dapat dipercaya oleh server yang menerima permintaan yang dikontrol pengguna. Penyerang dapat melewati halaman, memanggil titik akhir secara langsung, atau mengeksploitasi perbedaan parser. Server harus menguraikan dan membersihkan lagi dengan implementasi sadar HTML5 yang dikonfigurasi untuk konteks renderingnya.
Pengkodean keluaran juga tetap terpisah. HTML yang dimaksudkan sebagai teks harus di-escape oleh template, bukan disisipkan sebagai markup. Sebuah fragmen yang sengaja dirender sebagai HTML memerlukan sanitasi sebelum disimpan atau dikeluarkan sesuai dengan arsitektur. Pratinjau dalam kotak pasir hanya membuktikan bahwa pratinjau ini tidak memberikan skrip, formulir, atau akses asal yang sama.
Apa yang dicakup oleh alat ini — pemfilteran keluaran editor yang sempit, bukan sanitasi masukan yang tidak bersahabat secara umum
ToolAcre memfilter permukaan keluarannya sendiri, bertentangan dengan klaim buku kerja bahwa itu hanyalah alat inspeksi. Koreksi akuratnya lebih sempit: ini bukan pembersih XSS untuk tujuan umum untuk masukan bermusuhan yang sewenang-wenang. Sumber mengatakan ini secara eksplisit dan mendokumentasikan kemungkinan diferensial parser.
Iframe merupakan pertahanan mendalam untuk rendering di dalam ToolAcre. Atribut kotak pasirnya yang kosong tidak memberikan eksekusi skrip, pengiriman formulir, atau akses asal yang sama, dan kebijakan perujuk adalah tanpa perujuk. Setelah HTML disalin di tempat lain, bingkai tersebut tidak lagi melindunginya. Keamanan publikasi adalah milik sistem penerima.
Kesimpulan: periksa secara lokal, lakukan sanitasi di server — rangkum alur kerja dan bagaimana editor membantu Anda melihat apa yang akan dihadapi oleh pembersih
Periksa secara lokal, sanitasi di server, dan render sesuai konteks. Itu adalah tiga langkah berbeda. ToolAcre membantu mengungkap bagasi yang ditempel dan menawarkan subset draf yang konservatif, sementara pemberitahuan penghapusan membuat efek kebijakan terlihat sebelum sebuah fragmen mencapai CMS atau alur kerja email.
Jangan memasarkan pratinjau yang berhasil sebagai bukti terhadap XSS. Gunakan muatan uji hanya dalam konten sekali pakai, simpan sumber mentah secara terpisah ketika penyelidikan penting, dan verifikasi sanitasi tujuan secara independen. Klaim keamanan harus berhenti tepat di tempat kode dan batas rendering berhenti.