Halo rek π , pada artikel ini saya ingin mengajak kalian untuk mengenal salah satu kerentanan pada website yaitu Cross Site Scripting (XSS). Apa itu XSS? XSS adalah serangan injeksi kode pada suatu halaman web dengan menggunakan bahasa pemrograman sisi klien (client side scripting) seperti Javascript. Penyerang dapat memanfaatkan bagian pada halaman web seperti pada kolom komentar, kolom pencarian, kolom umpan balik, dan sejenisnya untuk mengirimkan kode berbahaya yang kemudian dijalankan oleh browser sehingga seolah-olah serangan ini datang dari situs tersebut. Akibat dari adanya serangan XSS maka penyerang dapat mem-bypass keamanan di sisi klien, mendapatkan informasi sensitif, atau menyimpan aplikasi berbahaya.
Perlu diketahui juga alasan Cross Site Scripting disingkat XSS bukan CSS karena CSS sudah sangat familiar dengan desain web yaitu Cascading Style Sheet. XSS sendiri dapat dibagi menjadi tiga jenis yaitu:
Stored XSS (Persistent XSS)
Stored XSS merupakan jenis XSS yang dampak serangannya lebih luas karena dapat menjangkau seluruh pengguna. Serangan XSS jenis ini mengizinkan pengguna untuk memasukkan data yang disimpan secara permanen di server target, seperti database, forum pesan, visitor log, dan lain-lain. Berikut adalah contoh serangan stored XSS:
Pada gambar di atas user memasukkan kode Javascript yang dapat dipergunakan untuk mengambil data sensitif di website dan apabila user mengklik βKirimβ maka data akan tersimpan di database sehingga setiap kali halaman tersebut tampil maka akan seperti gambar di bawah ini
Untuk mencegah serangan tersebut pada bahasa PHP salah satu caranya dapat menggunakan fungsi htmlspecialchars berikut adalah contoh penerapannya
Hasilnya maka kode Javascript yang dimasukkan pada kolom input tidak akan dieksekusi apabila halaman tersebut diakses oleh user namun hanya ditampilkan dalam bentuk tulisan seperti gambar di bawah ini
Berikut adalah perbedaan data yang disimpan dengan dan tanpa htmlspecialchars.
(dengan htmlspecialchars)
(tanpa htmlspecialchars)
Reflected XSS (Non-persistent XSS)
Reflected XSS adalah jenis XSS yang tidak permanen. XSS jenis ini merupakan yang paling umum dan yang paling mudah dilakukan oleh penyerang. Penyerang menggunakan teknik social engineering agar tautan yang sudah diinjeksi dengan kode berbahaya diklik oleh pengguna lain, kemudian penyerang bisa mendapatkan data-data penting dan sensitif seperti data cookie yang bisa digunakan untuk membajak session dari pengguna yang mengklik tautan tersebut. Berikut ini adalah contoh dari serangan reflected XSS.
Salah satu cara yang dapat dilakukan untuk mencegah serangan ini adalah dengan menggunakan fungsi htmlspecialchars seperti yang dicontohkan pada pembahasan stored XSS di atas.
DOM-based XSS
Serangan XSS yang terjadi jika penyerang dapat memanipulasi Document Object Model (DOM) kemudian data yang sudah terkontaminasi dengan XSS tersebut ditampilkan tanpa melalui proses sanitization yang tepat. Contoh kode yang dapat terkena serangan DOM-based XSS adalah seperti di bawah ini:
Pada potongan kode tersebut apabila kita memilih salah satu opsi pada input select maka opsi tersebut akan dicetak kembali dan karena menggunakan method GET maka opsi yang dipilih beserta value akan tampil pada address bar dengan begitu kita dapat mengubah value dengan contoh sebagai berikut:
Pada contoh di atas saya mengubah value dan mengisinya dengan kode javascript kemudian kode dieksekusi oleh browser. Cara mengatasi DOM-based XSS yang ada pada potongan kode di atas dapat dilakukan dengan mengubah penulisan kode menjadi seperti berikut:
Hasilnya ketika kita mengubah value maka kode javascript yang dimasukkan tidak akan dieksekusi seperti gambar di bawah ini
Terdapat banyak cara yang bisa dilakukan untuk mencegah serangan DOM-based XSS yang bisa kalian lihat pada situs OWASP.
Demikian artikel ini semoga memberikan manfaat positif bagi kita semua. Terima kasih.
Referensi:
https://www.logique.co.id/blog/2019/10/16/serangan-cross-site-scripting/
https://portswigger.net/web-security/cross-site-scripting/reflected/lab-html-context-nothing-encoded
https://dayatsupport.blogspot.com/2021/01/tutorial-patching-bug-xss.html
https://owasp.org/www-community/attacks/xss
https://owasp.org/www-community/xss-filter-evasion-cheatsheet
https://en.wikipedia.org/wiki/Cross-site_scripting
http://www.cgisecurity.com/xss-faq.html
http://www.scriptalert1.com/