Selama beberapa hari terakhir, kami telah melihat cara kerja serangan skrip lintas situs, dan bagaimana menyuntikkan teks biasa atau string HTML yang disandikan dapat membantu Anda tetap lebih aman. Kami juga melihat beberapa kelemahan dari kedua teknik tersebut Show
Hari ini, kita akan melihat satu pendekatan terakhir. sanitasi. Mari kita menggali lebih dalam Apa itu sanitasi?Sanitasi adalah proses menghapus atribut, properti, dan nilai apa pun yang tidak termasuk dalam daftar yang diizinkan atau yang secara eksplisit dilarang dalam daftar yang tidak diizinkan Misalnya, jika HTML yang dirender dari string HTML kita terlihat seperti ini…
Versi yang sudah dibersihkan mungkin terlihat seperti ini _Saat ditambahkan ke UI, beberapa item mungkin terlihat rusak, tetapi konten berbahaya tidak akan ditampilkan Cara membersihkan string HTML dengan vanilla JSMetode 5 mengonversi string HTML menjadi HTML asli tanpa merendernya di DOM sebenarnya. Akibatnya, kode jahat apa pun tidak dijalankan (dan tidak akan sampai elemen HTML tersebut disuntikkan ke UI)
Pustaka Sanitizer menggunakan metode _5 untuk membuat elemen HTML dari string HTML Anda, lalu mengulang setiap elemen dan menghapus semua atribut, properti, dan nilai yang tidak termasuk dalam daftar yang diizinkan atau secara eksplisit dilarang pada daftar yang tidak diizinkanAnda dapat meneruskan seluruh string HTML Anda ke pustaka pembersih, dan itu akan mengembalikan string yang telah disanitasi yang dapat Anda gunakan dengan properti string HTML, atau elemen yang telah disanitasi yang dapat Anda masukkan ke dalam DOM dengan metode seperti 7DOMPurify adalah library terkemuka di industri yang menggunakan daftar yang diizinkan dan sangat dapat dikonfigurasi Saya sangat merekomendasikannya. Namun hari ini, kita juga akan melihat cara membuat versi kita sendiri yang kurang dapat dikonfigurasi Membuat perpustakaan sanitasiPertama, mari buat fungsi pembungkus untuk pustaka kita bernama 8. Kami akan menerima string untuk dibersihkan sebagai argumenKami dapat mengembalikan string yang disanitasi ATAU node yang disanitasi itu sendiri. Mari beri pengguna kemampuan untuk memutuskan mana yang mereka inginkan dengan argumen kedua, 9. Jika _0, kami akan mengembalikan node, bukan string _Hal pertama yang ingin kita lakukan adalah mengonversi HTML 1 kita menjadi node HTML yang sebenarnyaMari buat fungsi pembantu, 2, untuk melakukannya untuk kita. Di dalamnya, kita akan menggunakan konstruktor 3 dan metode 4, dan mengembalikan 5. Jika tidak ada karena beberapa alasan, kami akan mengembalikan elemen 6 baru sebagai gantinyaKami akan segera menjalankannya, dan menetapkan nilai yang dikembalikan ke variabel 7
Sekarang, kami siap untuk membersihkannya Menghapus let parser = new DOMParser(); let doc = parser.parseFromString(`<img src="x" onerror="alert('XSS attacks!')">`, 'text/html'); // doc.body is a real HTML element with the malicious image // No alert is thrown, though, because the elements exist outside the DOM console.log(doc.body); 8 elemenPertama, kami ingin menghapus semua _8 elemen dari HTML kami. Mari buat fungsi _0 yang menerima simpul 7 sebagai argumenKami akan menggunakan metode _2 untuk menemukan semua elemen 8. Kemudian, kami akan menggunakan _4 loop untuk melewati masing-masing loop, dan menggunakan metode 5 untuk menghapusnya dari DOM
Kemudian, kami akan meneruskan _7 kami yang dikonversi ke dalamnya
Menghapus atribut berbahayaSekarang, kami siap menghapus atribut jahat dari 7 kamiMari buat fungsi _8 yang menerima elemen 7 sebagai parameter. Di dalamnya, kita akan menggunakan properti _0 untuk mendapatkan semua elemen turunan dalam sebuah elemenKita dapat menggunakan 4 loop untuk melewati masing-masing loop. Kami akan meneruskannya ke fungsi _2 untuk menghapus atribut berbahaya apa punJika _3 memiliki elemen anak itu sendiri, kami juga ingin membersihkannya. Kami akan secara rekursif meneruskan 3 kembali ke fungsi 8
Dalam fungsi _2, kita akan mendapatkan semua atribut pada elemen dengan properti 7Kami akan mengulang masing-masing dengan _4 loop, menggunakan penghancuran objek untuk mendapatkan 9 dan 0 dari atributDalam loop, kami akan memeriksa apakah atribut 1 menggunakan fungsi pembantu. Jika tidak, kami akan menggunakan operator 2 untuk melompat ke item berikutnya. Jika tidak, kami akan menggunakan metode 3 untuk menghapusnya
Untuk memeriksa apakah atribut kita berbahaya, pertama-tama kita akan melihat apakah itu dimulai dengan 4, karena 5 acara menjalankan skripKita bisa melakukannya dengan metode 6. Kami akan mengembalikan _0 jika itu terjadi
Selanjutnya, kami ingin mencari _8 dan 9 ketika atributnya adalah 0, 1, atau 2 (atribut yang tidak digunakan lagi pada SVG)Kami pertama-tama akan memasukkan nama properti itu ke dalam array, dan menggunakan metode 3 untuk melihat apakah 9 adalah salah satunya. Jika ya, kita dapat menggunakan metode _5 untuk memeriksa 8 dan 9 di 0 _0Tapi peretas menggunakan segala macam trik kapitalisasi dan spasi untuk menghindari hal-hal seperti itu, jadi kita perlu menormalkan string kita Kita dapat menggunakan metode _9 untuk menghapus semua spasi dari string kita, dan metode 0 untuk mengubahnya menjadi huruf kecil. Kami akan menetapkan string yang dinormalisasi ke variabel 1, dan menggunakannya sebagai gantinya _1Sekarang, kami memiliki pembersih yang lengkap MenggunakannyaKatakanlah kita memiliki string pihak ketiga seperti ini _2Kita bisa menyuntikkannya ke DOM seperti ini _3Sebagai alternatif, kita dapat menggunakan operator spread dan metode 2 dengan node sebagai gantinya _4Ini demonya. Anda juga dapat mengunduh skrip yang sudah selesai di Vanilla JS Toolkit Jika Anda menginginkan sesuatu yang lebih andal, DOMPurify adalah pustaka terkemuka di industri yang menggunakan daftar yang diizinkan dan sangat dapat dikonfigurasi Bagaimana cara mengubah file HTML menjadi string di C#?Langkah-langkah untuk Mengonversi HTML menjadi Teks di C# . Instal Aspose. HTML untuk. NET dari manajer paket NuGet Sertakan Aspose. namespace HTML di proyek Anda Muat konten file HTML ke sebuah String Buat instance kelas HTMLDocument untuk memuat String yang berisi HTML Bagaimana cara membaca file HTML di C# dan mengganti string?Coba ikuti. keluaran string = Regex. Replace(input, "XXX", "Kiran"); dengan input template html Anda sebagai string.
Bagaimana Anda menulis string dalam HTML?Penggunaan. Anda dapat membuat instance String menggunakan teks biasa atau HTML, misalnya kedua pernyataan ini valid. // Dari teks biasa var helloWorld = new HTMLString. String('Halo Dunia'); // Dari HTML var helloWorldBold = HTMLString baru.
Bagaimana cara memuat halaman HTML di C#?Cara memuat dokumen HTML di C# dan VB. Bersih . Muat dari file. DocumentCore dc = DocumentCore. Muat(@"d. \Buku. html"); Objek dc mewakili dokumen yang dimuat ke dalam memori. . Muat dari Arus. // Katakanlah kita sudah memiliki dokumen HTML sebagai array byte |