Alat pengembang · HTML pelarian entitas
Mengapa HTML pelolosan tidak cukup di dalam skrip, atribut onclick dan href
· Mengapa itu penting
html keamanan pengkodean url
Pelarian entitas melindungi HTML nilai teks dan atribut, tetapi nilai di dalam blok skrip, pengendali peristiwa, atau URL dibaca oleh parser yang berbeda. Posting ini menjelaskan setiap konteks dan pengkodean yang dibutuhkan.
Nilai yang lolos yang masih dieksekusi — string pengguna di dalam pengendali onclick dan alasan " tidak menyimpannya
Nilai yang lolos yang masih dieksekusi — string pengguna di dalam penangan onclick dan alasan " tidak menyimpannya. Atribut onclick diurai sebagai HTML dan kemudian dikompilasi sebagai JavaScript. Pengkodean hanya pembatas HTML masih dapat meninggalkan program berbahaya setelah browser mendekode nilai atribut tersebut.
Untuk memverifikasi html yang keluar dari konteks javascript, buat nilai yang lolos untuk pengembang yang lolos dari semuanya dan masih mendapat laporan XSS. Pertahankan tetap mengeksekusi pengguna sementara konteks parser bersarang menghasilkan string di dalam onclick; mengidentifikasi di mana handler dan mengapa quot dikonsumsi. Pengamatan tentang tidak menyimpannya hanya milik teks HTML.
Satu dokumen, beberapa bahasa — HTML, JavaScript, URL, dan CSS masing-masing memiliki parser dan aturan escapenya sendiri
Satu dokumen, beberapa bahasa — HTML, JavaScript, URL, dan CSS masing-masing memiliki parser dan aturan escapenya sendiri. Satu dokumen dapat memanggil parser HTML, JavaScript, URL dan CSS. Setiap bahasa memberikan arti yang berbeda pada tanda baca, sehingga satu tanda “escape” yang umum tidak dapat menggambarkan setiap tujuan dengan aman.
Pengembang yang lolos dari semuanya dan masih mendapatkan laporan XSS dapat menguji satu dokumen dalam beberapa bahasa dengan mencatat url javascript html dan sebelum konteks parser bersarang diteruskan. Bandingkan css masing-masing setelahnya dan temukan parser yang bertanggung jawab atas parsernya sendiri dan melarikan diri. Hasil konteks javascript pelolosan html ini menjelaskan aturan, bukan konteks yang dapat dieksekusi.
Di dalam <script> — mengapa entitas tidak didekodekan di sana dan JSON atau JavaScript string yang keluar diperlukan sebagai gantinya
Di dalam <script> — mengapa entitas tidak didekodekan di sana dan sebagai gantinya diperlukan pelolosan string JSON atau JavaScript. Di dalam teks mentah skrip, referensi bernama HTML tidak diterjemahkan seperti teks biasa. Buat serial data sebagai JSON dengan serializer yang terbukti, hindari interpolasi skrip sebaris, dan pertimbangkan urutan skrip penutup.
Pisahkan di dalam skrip mengapa entitas dalam sampel konteks parser bersarang singkat. Pertunjukan tidak didekodekan di sana sebagai sumber literal, ikuti dan json atau javascript ke tujuannya, dan beri nama API string bacaan yang keluar diperlukan. Untuk html yang keluar dari konteks javascript, tetap menjadi bukti yang terikat parser.
Atribut pengendali peristiwa — didekodekan sebagai HTML terlebih dahulu lalu dijalankan sebagai JavaScript, sehingga dua lapisan pelolosan diterapkan
Atribut pengendali peristiwa — didekodekan sebagai HTML terlebih dahulu lalu dijalankan sebagai JavaScript, sehingga dua lapisan pelolosan diterapkan. Atribut pengendali peristiwa menggabungkan dua tata bahasa dan harus dihindari. Perilaku mengikat dengan addEventListener membuat data keluar dari sumber yang dapat dieksekusi dan menghilangkan kebutuhan untuk pelolosan HTML-plus-JavaScript bersarang.
Perlakukan atribut pengendali kejadian yang didekodekan sebagai eksperimen batas. Pengembang yang lolos dari semuanya dan masih mendapatkan laporan XSS harus menyimpannya sebagai html terlebih dahulu dan, melakukan satu operasi konteks parser bersarang, dan memeriksa kemudian dijalankan sebagai javascript karakter demi karakter sebelum mengubahnya menjadi dua lapisan. Klaim tentang keluar dari penerapan berhenti di lapisan HTML ini.
href dan src — pengkodean persen untuk nilai plus entitas yang lolos untuk atribut, dan masalah skema javascript:
href dan src — pengkodean persen untuk nilai plus entitas yang lolos untuk atribut, dan masalah skema javascript:. Untuk href dan src, pertama-tama buat dan validasi URL, tolak skema yang tidak diinginkan, persen-encode komponen, lalu HTML-escape dari nilai atribut akhir yang dikutip. Konversi entitas saja tidak menolak javascript: URL.
Reproduksi persen href dan src dengan masukan yang tidak berbahaya, bukan materi pelanggan. Rekam pengkodean untuk nilai tersebut, amati ditambah pelolosan entitas, dan hitung setiap pass konteks parser bersarang yang disengaja. Jejak konteks javascript yang lolos dari html memungkinkan pengembang yang lolos dari semuanya dan masih mendapat laporan XSS mengevaluasi atribut dan masalah skema javascript tanpa menebak-nebak.
Contoh praktis: satu nilai ditempatkan di teks, di atribut, di onclick, dan di href — pengkodean yang benar untuk masing-masing nilai
Contoh praktis: satu nilai ditempatkan di teks, di atribut, di onclick, dan di href — pengkodean yang benar untuk masing-masing nilai. Nilai yang sama dimiliki dalam teks melalui pelolosan HTML, dalam atribut data melalui penanganan atribut yang dikutip, dalam kode melalui serialisasi terstruktur, dan dalam konstruksi URL hingga URL ditambah pemeriksaan skema.
Tempatkan contoh yang berfungsi satu nilai, ditempatkan dalam teks, dan atribut di onclick secara berdampingan selama tinjauan konteks parser bersarang. Pengembang yang lolos dari semuanya dan masih mendapatkan laporan XSS kemudian dapat memutuskan apakah dan di href perubahan tersebut terjadi pada konversi atau hilir. Pertahankan kesimpulan konteks javascript html yang keluar tentang pengkodean yang benar untuk setiap klaim keamanan umum.
Apa yang tidak tercakup di sini — CSS pembantu khusus mesin templat dan injeksi
Apa yang tidak tercakup di sini — CSS pembantu khusus mesin templat dan injeksi. CSS injeksi dan API khusus mesin templat dihilangkan karena memperkenalkan tata bahasa dan kontrak kerangka kerja tambahan. Pilihan yang aman adalah menggunakan API yang memisahkan data dari kode.
Tentukan apa yang tidak dilakukan sebelum menjalankan konteks parser bersarang. Simpan injeksi css penutup dan sebagai kontrol, periksa titik kode di belakang pembantu khusus mesin templat, dan petakan bukti konteks parser bersarang ke penerjemah berikutnya. Hal ini membuat bukti konteks parser bersarang dapat diaudit oleh pengembang yang lolos dari semuanya dan masih mendapatkan laporan XSS yang menyelidiki html yang lolos dari konteks javascript.
Kesimpulan: mengkodekan parser yang akan membacanya — bagaimana escaper entitas HTML menangani lapisan HTML, dan encoder & decoder URL dalam produk yang sama menangani lapisan URL
Kesimpulan: mengkodekan parser yang akan membacanya — bagaimana escaper entitas HTML menangani lapisan HTML, dan encoder & decoder URL dalam produk yang sama menangani lapisan URL. ToolAcre mencakup lapisan HTML, dan panel URL mencakup representasi komponen URL. Tidak ada panel yang memberikan otorisasi, membersihkan markup, memvalidasi skema, atau melindungi pernyataan SQL.
Hubungkan enkode takeaway ke keluaran konteks parser bersarang yang dapat diamati. Simpan parser yang akan terbaca di samping hasil sekali jalan, lalu verifikasi di mana cara html memasuki entitas escaper menanganinya. Pengembang yang lolos dari semuanya dan masih mendapatkan laporan XSS kini dapat meninjau lapisan html dan sebagai html sempit yang lolos dari temuan konteks javascript. Keputusan praktis di balik artikel ini bersifat spesifik: Pelarian entitas melindungi HTML nilai teks dan atribut, namun nilai di dalam blok skrip, pengendali peristiwa, atau URL dibaca oleh parser yang berbeda. Posting ini menjelaskan setiap konteks dan pengkodean yang dibutuhkan. Tindakan pembaca juga sama nyatanya: Tautan ke escaper entitas HTML untuk langkah pelepasan atribut dan menunjukkan peralihan ke panel encoder & decoder URL untuk nilai href tanpa memuat halaman.