ExampleGet the HTML content of an element with id="myP": Show let html = document.getElementById("myP").innerHTML; Try it Yourself »Change the HTML content of an element with id="demo": document.getElementById("demo").innerHTML = "I have changed!"; Try it Yourself »Get the HTML content of a
let html = document.getElementById("myList").innerHTML; Try it Yourself »Delete the HTML content of a element with id="demo": Try it Yourself »More examples below. Definition and UsageThe The Differences BetweeninnerHTML, innerText and textContentSee below SyntaxReturn the innerHTML property: Set the innerHTML property: Property ValuePropertyDescriptionStringHTML content.Return ValueTypeDescriptionStringThe HTML content of the element.More ExamplesExampleChange the HTML content of two elements: let text = "Hello Dolly."; ExampleRepeat the HTML content of an element: element.innerHTML += element.innerHTML; Try it Yourself »ExampleChange the HTML content and URL of a link: element.innerHTML = "W3Schools"; The Differences BetweeninnerHTML, innerText and textContentThe innerHTML property returns:The text content of the element, including all spacing and inner HTML tags.The innerText property returns: Just the text content of the element and all its children, without CSS hidden text spacing and tags, except Pada kesempatan ini, kita akan belajar tentang cara melindungi aplikasi web–terutama yang dibuat dengan Codeigniter–dari serangan XSS. Selain itu, kita juga akan belajar melakukan serangan XSS agar tahu cara menghindarinya. Baiklah.. Mari kita mulai! Apa itu XSS?XSS merupakan singkatan dari cross site scripting. Alasan singkatan yang digunakan XSS bukan CSS, karena CSS sudah digunakan untuk cascade style sheet. Jadi X untuk singkatan kata Cross. XSS merupakan salah satu bentuk serangan pada aplikasi web yang dilakukan dengan menginjeksi kode javascript dari sisi client. Dampak yang bisa diakbiatkan XSS:
Cara Mengatasi XSS di Codeigniter“Untuk menangkap pencuri, kita harus berpikir seperti pencuri” Mari kita pelajari bagaimana cara melakukan serangan XSS agar bisa menghindarinya. 1. Reflected XSSIni adalah jenis serangan XSS yang sering dilakukan attacker. Biasanya terjadi pada input dari parameter query string yang kita tampilkan. Contoh: Misalkan kita punya fitur pencarian seperti ini:
Kemudian pada view, kita menampilkan 0 yang diinputkan seperti ini:
Sekilas tidak ada masalah dengan kode ini. Tapi coba inputkan 1 dengan kode Javascript seperti ini:
Maka hasilnya: Bagaimana cara mengatasi serangan ini? ✅ Solusinya: Gunakan fungsi 2 pada view untuk menampilkan variabel 0.
Maka sekarang halaman ini tidak akan bisa diserang XSS. Tapi jangan senang dulu.. Masih ada jenis serangan XSS yang lainnya: 2. Stored XSSStored XSS adalah serangan XSS yang dilakukan dengan memasukan injeksi XSS pada input yang disimpan ke database. Sebenarnya tidak harus database, yang penting input itu disimpan di suatu tempat. Nantinya, saat ditampilkan di halaman view.. kode injeksi XSS-nya akan dieksekusi. Contohnya: Misalkan kita membuat fitur untuk aplikasi lowongan pekerjaan. Input yang kita butuhkan untuk menambahkan lowongan baru sebagai berikut.
Bentuk kode di Controller-nya seperti ini: 📜 7
..dan berikut ini kode untuk view-nya. 📜 8
📜 9
Ini hasilnya saat kita inputkan data yang benar. Sekarang coba berikan input untuk 4 atau judul lokernya dengan kode javascript.
Untuk URL kita kosongkan aja dulu.. Maka hasilnya: Serangan ini sama persis seperti XSS Reflected, bedanya injeksi pada seraingan ini akan disimpan di database. Pada contoh di atas memang kita tidak menggunakan database. Tapi dalam prakteknya, pasti kita akan menyimpan ke database untuk input data ini. Lalu solusi yang bisa kita lakukan apa? ✅ Solusi: Solusinya sama seperti XSS Reflected, yakni kita harus menampilkan output dengan fungsi 2.Maka pada view 📜 2 dapat kita ubah seperti ini:
Hasilnya: Mantap! Tapi jangan senang dulu.. Karena ini masih belum aman. Lah kenapa? Kita patut waspadai output pada atribut 3 pada image dan 4 pada link.Bisa saja mereka memberikan injeksi seperti ini:
Injeksi ini akan membuat atribut baru bernama 5 yang berfungsi untuk menjalankan kode javascript.Atau kita bisa juga menggunakan 6 seperti ini: 0Mari kita coba: Hasilnya: Lihat kan.. belum 100% aman hehe. Lalu giaman cara mengatasi ini? ✅ Solusi: Sebenarnya kita bisa gunakan double quote pada atribut HTML seperti ini: 1Hasilnya atribut akan seperti ini: Apakah sudah aman? Belum! 😄 Percobaan ini saya lakukan di browser versi terbaru. Kemungkin di browser versi lama, akan tetap kena. Terus solusinya bagaimana? Kita bisa gunakan konstanta 7 pada parameter 2 untuk melakukan enkode pada tanda petik. Baik yang ganda maupun yang tunggal.Sehingga kode viewnya akan menjadi seperti ini: 2Hasilnya bisa kita lihat di View Source. Masalah injeksi tanda petik sudah beres. Apakah sudah aman? Belum! 🤣 Serangan injeksi berikutnya, saat user menginputkan: 3Biasanya jika nilai ini diberikan pada link, maka browser akan menjalankan kode javascript yang diberikan. Coba gunakan input tersebut. Hasilnya: Kita sudah menggunakan 2, tapi yang ini bisa lolos.Solusinya giaman donk? ✅ Solusi: Solusi yang bisa kita lakukan untuk mengatasi serangan ini adalah dengan melakukan validasi data. Baik di sisi client maupun server. Pelajari juga:
Mari kita coba lakukan validasi di sisi server terlebih dahulu. Ubah Controllernya menjadi seperti ini: 4Kemudian ubah view untuk form-nya menjadi seperti ini: 📜 9 5Hasilnya: Mantap! Dengan begini aman sudah. Tinggal lakukan validasi di sisi client. Validasi di sisi client bisa kita lakukan dengan atribut HTML. Kita bisa ubah nilai pada atribut 1 menjadi 2 dan juga menambahkan 3 untuk validasi dengan regex.Silahkan pelajari juga:
Maka sekarang kita ubah kode view untuk form-nya menjadi seperti ini: 6Hasilnya: Kini saya rasa sudah aman.. Tapi jangan berpikir 100% akan aman, hehe. Karena masih ada bentuk serangan XSS yang lainnya: 3. DOM Based XSSDOM Based XSS adalah jenis serangan XSS yang injeksinya dijalankan di dalam DOM (Document Object Model). Apa itu DOM? Silahkan pelajari di:
Untuk mendemokan serangan ini, mari kita ubah view pada form 4 menjadi seperti ini: 7Kita menambahkan fitur untuk preview image berdasarkan URL image yang diinputkan. Jika URL yang diinputkan bernar, maka akan tampil seperti ini: Berdasarkan kode javascript yang kita buat. Kita menampilkan image dengan manipulasi DOM. Ini tentunya akan membuat kita bisa melakukan DOM based XSS. Mau bukti? Silahkan inputkan injeksi XSS berikut di dalam URL image. 8Maka hasilnya: Benar kan! 😆 Padahal kita sudah melakukan validasi di sisi client dan server. Lalu gimana solusinya? ✅ Solusi: Solusi untuk menghindari DOM based XSS sebenarnya hampir sama seperti Reflected XSS. Bedanya, DOM based XSS dilakukan di client atau di dalam Javascript.. bukan di dalam PHP atau kode server. Namun, fungsi 2 di javascript belum ada. Fungsi ini bisa kita buat secara manual, atau bisa juga memanfaatkan library seperti underscore.js dengan fungsi 6.Ada juga library DOMPurifyyang khusus untuk mengatasi XSS. OWASP sendiri juga menawarkan library ESAPI untuk escape HTML di javascript. Kamu bisa baca:
Solusi lain bisa dengan men-trigger validator HTML saat input field diinputkan. Contohnya seperti ini: 9Maka preview image tidak akan ditampilkan selama nilai URL yang diberikan tidak valid. 4. Self-XSSTeknik XSS ini sulit diatasi dari kode aplikasi. Karena dilakukan sendiri oleh user. Misalnya gini: Seorang Attacker melakukan sosial enginering ke pada pengguna market place. Attacker: “Hi, saya punya kode rahasia buat dapetin diskon 99%” Korban: “Benarkah? gimana caranya?” Attacker: “Buka aplikasinya dari Google Chrome di Laptop, masuk ke halaman checkout, Klik kanan, lalu pilih inspect element, Lalu masuk ke Console. Setelah itu, paste Kode ini 7, setelah itu tekan Enter. ”Korban: “Wah boleh nih dicoba.” Beberapa hari kemudian.. Korban: “Kok saldo saya hilang 😭!!!” Nah kira-kira begitulah skenario terjadinya Self XSS. Injeksi XSS-nya dijalankan sendiri oleh user yang merupakan korban Social Engineering. Lalu bagaimana cara mengatasinya? ✅ Solusi: Seperti yang saya bilang, Self XSS sulit diatasi dari kode aplikasi. Salah satu cara yang bisa dilakukan adalah memberikan edikasi kepada user agar tidak menjalankan kode apapun di dalam Console Javascript browser. Kita bisa tiru cara facebook memberikan edukasi dengan menampilkan pesan ini di console Javascript. 5. Mutated XSS (mXSS)Teknik serangan XSS yang ini sangat jarang digunakan dan sulit untuk dideteksi. Karena baru ditemukan di tahun 2019. |