Pada kesempatan kali ini, kita akan mempelajari cara melindungi aplikasi web–khususnya yang dibuat dengan Codeigniter–dari serangan XSS Show Selain itu, kita juga akan mempelajari cara melakukan serangan XSS agar dapat mengetahui cara menghindarinya Baiklah Mari kita mulai Apa itu XSS?XSS adalah singkatan dari skrip lintas situs Alasan singkatan yang digunakan adalah XSS bukan CSS, karena CSS sudah digunakan untuk cascade style sheet Jadi X adalah singkatan dari Cross XSS merupakan salah satu bentuk serangan terhadap aplikasi web yang dilakukan dengan menginjeksi kode javascript dari sisi client. Dampak yang dapat ditimbulkan XSS
Cara Mengatasi XSS di Codeigniter"Untuk menangkap pencuri, kita harus berpikir seperti pencuri" Mari pelajari cara melakukan serangan XSS untuk menghindarinya 1. XSS yang dipantulkanIni adalah jenis serangan XSS yang sering dilakukan penyerang Ini biasanya terjadi pada input parameter string kueri yang kami tampilkan Contoh Misalkan kita memiliki fitur pencarian seperti ini
Kemudian pada tampilan, kita tampilkan _0 yang diinputkan seperti ini
Sekilas tidak ada masalah dengan kode ini Tapi coba masukan _1 dengan kode Javascript seperti ini _Jadi hasilnya Bagaimana mengatasi serangan ini? ✅ Solusinya Gunakan fungsi _2 pada tampilan untuk menampilkan variabel 0
Jadi sekarang halaman ini tidak akan bisa diserang oleh XSS Tapi jangan senang dulu Masih ada jenis serangan XSS lainnya 2. XSS tersimpanXSS Tersimpan adalah serangan XSS yang dilakukan dengan menyuntikkan XSS pada input yang disimpan dalam database Sebenarnya tidak harus database, yang penting inputnya disimpan di suatu tempat Nanti saat ditampilkan di halaman tampilan. kode injeksi XSS akan dieksekusi Sebagai contoh Misalkan kita membuat fitur untuk aplikasi lowongan kerja. Masukan yang kita butuhkan untuk menambah lowongan baru adalah sebagai berikut
Bentuk kode di Controllernya seperti ini 📜 _7
dan ini adalah kode untuk tampilan 📜 _8
📜 _9
Ini adalah hasil ketika kita input data yang benar Sekarang coba masukkan _4 atau judul loker dengan kode javascript
Untuk URL biarkan kosong saja Jadi hasilnya Serangan ini sama persis dengan Reflected XSS, bedanya injeksi akan disimpan di database Pada contoh di atas kita tidak menggunakan database. Namun dalam praktiknya, kami pasti akan menyimpannya ke database untuk menginput data ini Lalu apa solusi yang bisa kita lakukan? ✅ Solusi Solusinya sama dengan XSS Reflected, yaitu kita harus menampilkan output dengan fungsi 2Jadi di lihat 📜 _2 kita bisa mengubahnya seperti ini
Hasil Besar Tapi jangan senang dulu Karena ini masih belum aman Mengapa? Kita harus mengetahui keluaran pada atribut 3 pada gambar dan 4 pada tautanMereka bisa memberikan suntikan seperti ini
Injeksi ini akan membuat atribut baru bernama 5 yang berfungsi untuk menjalankan kode javascriptAtau kita juga bisa menggunakan 6 seperti ini 0Mari mencoba Hasil Lihat itu. belum 100% aman hehe Lalu bagaimana cara mengatasi hal tersebut? ✅ Solusi Sebenarnya kita bisa menggunakan tanda kutip ganda pada atribut HTML seperti ini 1Atribut yang dihasilkan akan terlihat seperti ini Apakah ini aman? Belum. 😄 Saya melakukan percobaan ini di browser versi terbaru. Mungkin saja di browser versi lama masih akan terpengaruh Apa solusinya? Kita dapat menggunakan konstanta 7 pada parameter 2 untuk menyandikan tanda kutip. Baik ganda maupun tunggalJadi kode tampilannya akan seperti ini 2Kita bisa melihat hasilnya di View Source Masalah injeksi tanda kutip telah diperbaiki Apakah ini aman? Belum. 🤣 Serangan injeksi berikutnya, saat pengguna memasukkan _3Biasanya jika nilai ini diberikan pada link, maka browser akan menjalankan kode javascript yang diberikan Coba gunakan masukan itu Hasil Kami sudah menggunakan _2, tapi yang ini bisa lewatApa solusinya? ✅ Solusi Solusi yang bisa kita lakukan untuk mengatasi serangan ini adalah dengan melakukan validasi data. Baik di sisi klien maupun server Belajar juga
Mari kita coba lakukan validasi di sisi server terlebih dahulu Ubah Controller menjadi seperti ini _4Kemudian ubah tampilan untuk form menjadi seperti ini 📜 _9 5Hasil Besar Dengan cara ini aman Validasi saja di sisi klien Validasi di sisi klien dapat dilakukan dengan atribut HTML. Kita dapat mengubah nilai pada atribut _1 menjadi 2 dan juga menambahkan 3 untuk validasi dengan regexSilakan belajar juga
Nah sekarang kita ubah view codenya menjadi seperti ini 6Hasil Sekarang saya merasa aman Tapi jangan dikira 100% aman, hehe Karena masih ada bentuk serangan XSS lainnya 3. XSS Berbasis DOMXSS Berbasis DOM adalah jenis serangan XSS yang injeksinya dilakukan di DOM (Document Object Model) Apa itu DOM? Silahkan belajar di
Untuk mendemonstrasikan serangan ini, mari ubah tampilan pada form 4 menjadi seperti ini 7Kami menambahkan fitur untuk pratinjau gambar berdasarkan masukan URL gambar Jika URL yang dimasukkan valid, maka akan muncul seperti ini Berdasarkan kode javascript yang kami buat. Kami menampilkan gambar dengan manipulasi DOM Hal ini tentunya akan membuat kita bisa melakukan XSS berbasis DOM Ingin bukti? Silakan masukkan injeksi XSS berikut di URL gambar _8Jadi hasilnya Itu benar. 😆 Meskipun kami telah melakukan validasi di sisi klien dan server Lalu apa solusinya? ✅ Solusi Solusi untuk menghindari XSS berbasis DOM sebenarnya hampir sama dengan Reflected XSS Perbedaannya adalah bahwa XSS berbasis DOM dilakukan pada klien atau dalam Javascript. tidak dalam PHP atau kode server Namun, fungsi _2 di javascript belum ada. Kita bisa membuat fungsi ini secara manual, atau kita juga bisa menggunakan library seperti underscore. js dengan fungsi 6Ada juga perpustakaan DOMPurify yang khusus menangani XSS OWASP sendiri juga menawarkan perpustakaan ESAPI untuk keluar dari HTML dalam javascript Kamu bisa membaca
Solusi lain adalah memicu validator HTML saat bidang input dimasukkan Misalnya seperti ini _9Jadi gambar pratinjau tidak akan ditampilkan selama nilai URL yang diberikan tidak valid 4. Self-XSSTeknik XSS ini sulit diatasi dari kode aplikasi. Karena dilakukan oleh pengguna sendiri Misalnya ini Penyerang melakukan rekayasa sosial untuk memasarkan pengguna Penyerang. "Hai, saya punya kode rahasia untuk mendapatkan diskon 99%" Korban. "Betulkah? Penyerang. "Buka aplikasi 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, kamu bisa mencobanya. ” Beberapa hari kemudian Korban. "Kenapa saldo saya hilang 😭?. ” Nah kira-kira seperti itulah skenario Self XSS Injeksi XSS dilakukan oleh pengguna yang menjadi korban Rekayasa Sosial Lalu bagaimana cara mengatasinya? ✅ Solusi Seperti yang saya katakan, Self XSS sulit diatasi dari kode aplikasi. Salah satu cara yang dapat dilakukan adalah memberikan instruksi kepada pengguna untuk tidak menjalankan kode apapun di browser Console Javascript Kita bisa meniru cara Facebook memberikan edukasi dengan menampilkan pesan ini di konsol Javascript 5. XSS bermutasi (mXSS)Teknik serangan XSS ini sangat jarang digunakan dan sulit dideteksi. Karena baru ditemukan pada tahun 2019 |