XSS Adalah Serangan Injeksi Code yang Harus Kamu Waspadai
Pernahkah kamu mendengar istilah XSS? Bukan CSS lo ya.. XSS adalah salah satu serangan yang ditujukan pada suatu script dengan cara memasukkan script tersebut ke dalam website.
XSS biasanya dilakukan hacker dengan menyisipkan kode atau script ke dalam suatu website. Saat hacker berhasil menyisipkan kode atau script ke dalam website, hacker bisa mendapatkan data- data yang ada di website kamu.
Script bisa dalam bentuk JavaScript, VBScript, ActiveX, Flash. Bagaimana cara kerjanya? Dan tips mencegah serangan XSS?
XSS Adalah
Cross-site Scripting atau XSS adalah suatu jenis serangan yang menggunakan kode berbahaya pada sisi klien. Intensi dari penyerang dalam serangan ini adalah untuk menjalankan skrip berbahaya di browser web korban.
Penyerang mencapainya dengan menyisipkan kode berbahaya pada halaman web atau aplikasi web yang sah.
Ketika korban mengunjungi halaman tersebut, kode berbahaya ini dijalankan di browser pengguna, dengan cara menyisipkan skrip berbahaya melalui halaman web atau aplikasi web yang menjadi jalur pengiriman.
Contoh tempat rentan untuk serangan XSS adalah forum, message boards, dan halaman web yang memungkinkan komentar dari pengguna.
Hal ini rentan terjadi ketika halaman web atau aplikasi web ini tidak dapat memproses dengan benar input dari pengguna sebelum menghasilkan output. Jika input pengguna yang tidak bersih, kemudian diuraikan oleh browser korban, maka skrip berbahaya dapat dieksekusi.
Serangan XSS adalah dapat memanfaatkan berbagai teknologi, termasuk VBScript, ActiveX, Flash, dan CSS. Namun, yang paling umum adalah menggunakan JavaScript, karena JavaScript menjadi sangat mendasar untuk sebagian besar pengalaman menjelajah di web.
Oleh karena itu, penting bagi kamu sebagai pengembang (developer) untuk menghindari penggunaan input pengguna yang tidak terlindungi dan selalu memproses input dengan benar untuk mengurangi risiko serangan XSS.
Cara Kerja XSS
Pada pembahasan sebelumnya, sudah dijelaskan secara umum mengenai cara kerja XSS. Berikut adalah penjelasan lebih lanjut mengenai cara kerja Cross-Site Scripting atau XSS adalah serangan XSS dimulai dengan menyisipkan kode berbahaya ke dalam halaman web yang sah atau aplikasi web.
Penyerang akan mencari celah atau titik lemah dalam halaman web atau aplikasi web yang memungkinkan pengguna untuk memasukkan teks atau data, seperti formulir pencarian, kotak komentar, atau formulir login.
Melalui celah ini, penyerang akan menyisipkan kode berbahaya, yang dapat berupa JavaScript atau skrip lain yang berpotensi berbahaya.
Kode berbahaya ini kemudian akan diunduh ke browser korban ketika halaman web atau aplikasi web tersebut dimuat.
Setelah kode berbahaya disisipkan, halaman web atau aplikasi web tersebut akan menyimpan dan menampilkan data tersebut ke pengguna lain yang mengaksesnya. Ketika halaman web dimuat di browser korban, kode berbahaya yang sebelumnya disisipkan akan diunduh bersamaan dengan konten halaman web.
Setelah kode berbahaya diunduh, browser korban akan mengeksekusi kode tersebut tanpa sepengetahuan pengguna.
Ketika kode berbahaya telah diunduh ke browser korban, browser akan mengeksekusi kode tersebut tanpa sepengetahuan atau persetujuan pengguna. Proses eksekusi ini berarti bahwa kode berbahaya akan berjalan di dalam konteks situs yang sah, sehingga memungkinkannya mengakses dan memanipulasi data yang ada di halaman web tersebut.
Kode berbahaya ini dapat melakukan berbagai tindakan berbahaya, seperti mencuri informasi pribadi pengguna, mengubah tampilan halaman web, atau bahkan mengambil alih akun pengguna.
Setelah dieksekusi, kode berbahaya dapat melakukan berbagai tindakan yang berbahaya bagi pengguna. Misalnya, serangan XSS adalah dapat menyebabkan pencurian data sensitif, seperti informasi login, kartu kredit, atau sesi pengguna.
Selain itu, penyerang juga dapat mengubah tampilan halaman web dengan memodifikasi elemen HTML atau mengalihkan pengguna ke situs palsu untuk memancing informasi pribadi lebih lanjut.
Melalui pemahaman tentang cara kerja serangan XSS, penting bagi kamu sebagai pengembang web untuk selalu waspada terhadap potensi celah keamanan dalam halaman web atau aplikasi web kamu.
Jenis-Jenis XSS
Serangan XSS adalah terbagi menjadi tiga kategori utama, diantaranya :
Reflected XSS
Reflected XSS adalah yang juga dikenal sebagai serangan XSS yang tidak persisten atau menetap, merupakan jenis serangan yang dapat mempengaruhi situs web lain yang diakses oleh pengguna. Pada kasus serangan ini, script berbahaya yang dimasukkan oleh penyerang akan dipantulkan atau tercermin ke halaman web lain yang dibuka di browser pengguna.
Cara kerjanya Reflected XSS adalah ketika input pengguna dari URL atau data yang dikirimkan melalui formulir tidak disimpan di server, melainkan langsung tercermin pada halaman web tersebut.
Misalnya, penyerang dapat menyisipkan kode berbahaya dalam URL atau mengirimkan data melalui formulir pencarian atau kotak komentar.
Ketika korban mengklik tautan yang mengandung URL jahat tersebut atau mengirimkan formulir dengan data berbahaya, maka payload (konten berbahaya) akan dipantulkan ke halaman web yang dibuka oleh korban.
Namun, perlu diingat bahwa payload semacam ini seringkali dapat dideteksi oleh filter XSS yang sudah ada di browser pengguna, seperti Chrome, Internet Explorer, atau Edge, sehingga dapat menjadi upaya untuk melindungi pengguna dari serangan tersebut.
Meskipun serangan ini mungkin berhasil menginfeksi halaman web sasaran, browser modern biasanya telah dilengkapi dengan fitur keamanan yang dapat membantu melindungi pengguna dari serangan XSS ini.
Walaupun demikian, tetaplah berhati-hati saat mengklik tautan yang mencurigakan atau memasukkan data pribadi kamu ke dalam formulir yang tidak terpercaya untuk menghindari potensi serangan seperti ini.
Stored XSS
Stored XSS, yang juga disebut sebagai XSS persisten, adalah jenis serangan yang melibatkan penyisipan kode berbahaya langsung ke dalam aplikasi web. Bedanya dengan Reflected XSS, pada Stored XSS, payload berbahaya tidak dipantulkan ke situs web lain, melainkan disimpan di dalam aplikasi web itu sendiri.
Pada contoh kasus ini, payload berbahaya bisa disimpan di database atau tempat penyimpanan lainnya yang digunakan oleh aplikasi web. Setelah payload berbahaya tersimpan, skrip tersebut akan dieksekusi secara otomatis ketika pengguna membuka halaman terkait pada aplikasi web.
Hal ini berarti bahwa saat pengguna mengakses halaman yang mengandung payload, kode berbahaya tersebut akan dijalankan langsung pada browser pengguna.
Sehingga, Stored XSS adalah juga dapat menyebabkan dampak yang lebih berbahaya dibandingkan Reflected XSS karena payload berbahaya akan tetap aktif selama data berbahaya tersebut tersimpan di dalam aplikasi.
Salah satu contoh lain dari serangan Stored XSS adalah ketika ada formulir pencarian pada sebuah situs web. Ketika pengunjung menggunakan formulir pencarian tersebut untuk mencari sesuatu, query pencariannya dikirimkan ke server untuk diproses.
Hasil dari query ini kemudian disimpan dan ditampilkan hanya untuk pengguna yang melihatnya. Jika ada celah keamanan dalam proses penyimpanan dan tampilan hasil pencarian tersebut, penyerang dapat menyisipkan kode berbahaya dalam hasil pencarian tersebut.
Akibatnya, ketika pengguna lain melihat hasil pencarian, payload berbahaya akan dieksekusi pada browser mereka.
Penting untuk diingat bahwa serangan Stored XSS dapat berdampak serius, karena payload berbahaya akan tetap aktif selama data berbahaya tersebut disimpan di dalam aplikasi.
Oleh karena itu, para pengembang aplikasi web harus selalu memastikan keamanan aplikasi mereka dengan memvalidasi dan membersihkan input pengguna sebelum menyimpannya, serta menggunakan teknik-teknik keamanan lainnya untuk mencegah serangan XSS ini.
DOM XSS
DOM XSS adalah salah satu bentuk serangan Cross-Site Scripting (XSS) yang berbeda dari yang biasa kamu dengar, karena serangan ini tidak mengandung script berbahaya dalam kode HTML halaman web.
Pada serangan XSS jenis reflected dan stored, kamu bisa melihat payload berbahaya di halaman web itu sendiri, tetapi pada XSS berbasis DOM, kode berbahaya ini tidak terlihat di tampilan halaman web tersebut.
Payload tersebut baru akan terlihat atau dijalankan pada saat runtime, ketika halaman web tersebut sudah dijalankan di browser pengguna atau saat kamu menyelidiki struktur DOM dari halaman tersebut.
Hal ini dapat membuat serangan XSS berbasis DOM lebih sulit untuk dideteksi menggunakan teknik yang biasa digunakan dalam serangan XSS lainnya, karena payload berbahaya tidak terlihat dalam kode sumber HTML halaman.
Oleh karena itu, diperlukan pendekatan yang lebih cermat untuk mengidentifikasi potensi serangan XSS berbasis DOM.
Tips Cara Mencegah XSS
Setelah kamu memahami cara kerja dari XSS, ada beberapa langkah sederhana yang dapat diambil untuk mencegahnya.
Melalui langkah-langkah pencegahan ini, kamu dapat meningkatkan keamanan situs kamu dari potensi serangan XSS dan melindungi pengguna dari ancaman berbahaya.
Berikut adalah beberapa hal yang dapat kamu lakukan untuk mencegah XSS :
Analisis Keamanan Situs
Dalam menjaga keamanan aplikasi website kamu, ada beberapa langkah yang perlu diambil. Pastikan halaman yang menampilkan konten dinamis telah diatur dengan baik agar tidak mendukung tag yang tidak diinginkan.
Misalnya, lakukan penyaringan (filtering) data yang masuk ke halaman tersebut untuk menghilangkan potensi konten berbahaya. Selain itu, pastikan data yang diterima melalui halaman web telah divalidasi dengan benar, sehingga hanya data yang sah dan aman yang diizinkan masuk.
Selanjutnya, lakukan pengkodean (encoding) data yang akan ditampilkan pada halaman web. Melalui cara ini, data sensitif atau berpotensi berbahaya akan diubah menjadi bentuk yang sulit dipahami oleh perangkat lunak jahat.
Pengkodean data dapat membantu melindungi informasi pengguna dari serangan XSS atau serangan berbasis skrip lainnya.
Jika kamu ingin memastikan keamanan lebih lanjut, kamu dapat menggunakan alat penguji kerentanan situs web seperti Sucuri atau VirusTotal. Alat-alat ini akan membantu kamu menganalisis tingkat keamanan situs kamu dan mencari potensi kelemahan atau kerentanan keamanan yang mungkin ada.
Apabila kamu dapat mengetahui informasi lengkap tentang potensi risiko, kamu akan lebih mudah dalam mengambil langkah-langkah yang tepat untuk mengamankan situs kamu dari kemungkinan ancaman.
Menambahkan SDL
Penerapan Secure Development Lifecycle (SDL) memiliki banyak manfaat dalam mengembangkan aplikasi web.
Penggunaan SDL memungkinkan tim pengembang untuk mengurangi risiko kesalahan coding dan masalah keamanan yang sering terjadi dalam proses pengembangan.
SDL membantu dalam mengidentifikasi potensi kerentanan sejak awal dan memastikan bahwa langkah-langkah keamanan diterapkan dengan benar selama seluruh siklus pengembangan.
Manfaat utama dari SDL yaitu kemampuannya untuk membantu menghasilkan perangkat lunak yang lebih aman.
Melalui pengintegrasian langkah-langkah keamanan secara menyeluruh dalam seluruh proses pengembangan, aplikasi web dapat memiliki tingkat keamanan yang lebih tinggi dan dapat menghadapi berbagai jenis serangan, termasuk serangan XSS.
Mengadopsi crossing boundaries policy
Pada sebagian besar situs web, kamu dapat masuk ke akun kamu dengan cara memasukkan informasi login, seperti username dan password.
Proses ini memverifikasi identitas kamu sehingga kamu dapat mengakses fitur-fitur tertentu yang hanya tersedia untuk pengguna terdaftar.
Selain itu, dalam beberapa situasi, pemilik situs web dapat meminta kamu untuk memasukkan kembali informasi login kamu saat mengakses halaman atau fitur khusus yang memerlukan tingkat keamanan lebih tinggi.
Tindakan ini dapat membantu melindungi informasi pribadi dan menghindari akses yang tidak sah ke akun kamu.
Mengkodekan data pada output
Penting untuk melakukan pengkodean (encoding) pada data yang dikendalikan oleh pengguna sebelum ditampilkan di halaman web.
Hal ini harus dilakukan secara langsung sebelum data tersebut ditulis pada halaman, karena penggunaan konteks tempat penulisan akan menentukan jenis pengkodean yang harus digunakan.
Misalnya, jika data tersebut akan ditampilkan sebagai nilai dalam skrip JavaScript, pengkodean yang diperlukan akan berbeda dengan yang digunakan dalam konteks HTML. Dalam konteks HTML, kamu harus mengkonversi nilai yang tidak masuk daftar putih menjadi entitas HTML:
- <mengkonversi ke:<
- >mengkonversi ke:>
Dalam konteks string JavaScript, nilai non-alfanumerik harus diloloskan dari Unicode:
- <mengkonversi ke:\u003c
- >mengkonversi ke:\u003e
Terkadang, kamu perlu menerapkan beberapa lapisan pengkodean dengan urutan yang tepat. Sebagai contoh, jika kamu ingin menyisipkan input dari pengguna secara aman ke dalam event handler, kamu harus memperlakukan konteks JavaScript dan konteks HTML dengan benar. Jadi, kamu harus terlebih dahulu melakukan Unicode-escape input, lalu HTML-encode-nya:
<a href="#" onclick="x='This string needs two layers of escaping'">test</a>
Validasi input pada saat arrival
Pengkodean merupakan langkah penting untuk melindungi dari serangan XSS, tetapi tidak cukup dalam semua situasi. Selain itu, kamu juga harus melakukan validasi pada input dari pengguna sejak dini. Contoh cara melakukan validasi input antara lain:
- Jika pengguna mengirimkan URL yang akan ditampilkan sebagai tanggapan, pastikan URL tersebut dimulai dengan protokol yang aman seperti HTTP atau HTTPS. Jangan biarkan URL menggunakan protokol berbahaya seperti javascript atau data, karena dapat dieksploitasi untuk menyisipkan kode berbahaya.
- Jika pengguna diharapkan memasukkan angka, pastikan nilai yang diterima benar-benar berupa bilangan bulat.
- Validasi juga bisa dilakukan untuk memastikan input hanya berisi karakter yang diharapkan. Idealnya, validasi akan memblokir input yang tidak valid agar tidak dapat digunakan untuk celah penyerangan. Pendekatan lainnya adalah mencoba membersihkan input yang tidak valid agar menjadi valid, tetapi pendekatan ini lebih berisiko kesalahan dan sebaiknya dihindari sebisa mungkin.
Whitelisting vs blacklisting
Penting untuk menggunakan validasi inputan dengan cara yang lebih aman. Sebagai contoh, dibandingkan dengan mencoba membuat daftar panjang yang berisi semua protokol berbahaya seperti javascript atau data, lebih baik jika kamu buat daftar yang berisi protokol yang aman seperti HTTP dan HTTPS. Melalui cara ini, kamu akan menghalau segala sesuatu yang tidak termasuk dalam daftar tersebut, sehingga situs kamu akan lebih terlindungi.
Jika ada protokol berbahaya baru yang muncul di masa depan, kamu tidak perlu khawatir, karena situs kamu telah dilindungi oleh daftar protokol aman tersebut. Pendekatan ini akan membuat situs kamu lebih aman dan mengurangi kemungkinan serangan yang mencoba menghindari validasi dengan menggunakan nilai yang tidak valid.
Mengizinkan “safe” HTML
Mengizinkan pengguna untuk memposting kode HTML bisa menjadi risiko, tetapi terkadang ini diperlukan untuk keperluan bisnis. Misalnya, situs blog mungkin ingin mengizinkan pengguna untuk memposting komentar yang berisi beberapa kode HTML terbatas.
Pendekatan yang umumnya digunakan adalah mencoba menyaring tag dan JavaScript berbahaya.
Kamu dapat mencoba menerapkan whitelisting yang hanya mengizinkan tag dan atribut yang aman, tetapi hal ini bisa sangat sulit karena perbedaan dalam mesin parsing browser dan serangan XSS yang canggih.
Salah satu opsi yang lebih aman adalah menggunakan library JavaScript seperti DOMPurify yang melakukan pemfilteran dan pengkodean data di browser pengguna.
Ada juga library lain yang memungkinkan pengguna untuk menyediakan konten dalam format yang lebih aman dan mengubahnya menjadi HTML.
Namun, perlu diingat bahwa semua library ini memiliki potensi kerentanan XSS dari waktu ke waktu, jadi kamu harus selalu memperbarui keamanannya dengan cermat jika memilih menggunakan library tersebut.
Setel HttpOnly flag
Dalam meningkatkan keamanan dari potensi kerentanan XSS, penting untuk mengaktifkan bendera HttpOnly pada cookie.
Saat kamu mengaktifkan bendera HttpOnly, cookie tidak akan bisa diakses melalui JavaScript di sisi klien. Hal ini berarti bahwa cookie hanya dapat diakses oleh server dan tidak dapat diambil atau dimodifikasi oleh skrip berbahaya di halaman web.
Melalui aktivasi HttpOnly flag, kamu dapat mencegah serangan XSS yang mencoba mencuri informasi login atau data sensitif dari cookie pengguna. Langkah ini penting untuk menjaga keamanan dan melindungi pengguna dari potensi ancaman keamanan.
Untuk keamanan HTTP lebih lanjut, kamu bisa pasang SSL murah pada websitemu.
Gunakan Content Security Policy (CSP)
Jika kamu ingin menjaga situs web kamu lebih aman lagi dari potensi serangan XSS, kamu dapat menggunakan Content Security Policy (CSP).
CSP adalah bagian dari tajuk respons HTTP yang memberi kamu kendali atas dari mana sumber daya dinamis diizinkan untuk dimuat di halaman web kamu berdasarkan asal permintaannya.
Penerapan CSP memungkinkan kamu untuk dapat membatasi sumber daya yang dapat diakses oleh halaman kamu, sehingga mengurangi risiko serangan XSS dan menjaga keamanan situs web kamu.
Dalam implementasi CSP, kamu bisa menentukan kebijakan tentang sumber daya yang diizinkan, seperti skrip JavaScript, gambar, video, atau gaya halaman (CSS). Kamu juga dapat menentukan domain atau protokol tertentu yang diperbolehkan untuk memuat sumber daya di halaman kamu.
Sehingga, jika ada usaha untuk menyuntikkan skrip berbahaya ke situs kamu, CSP akan menghalangi sumber daya dari asal yang tidak diizinkan. CSP memberikan lapisan keamanan tambahan yang sangat bermanfaat dalam melindungi situs web dari ancaman XSS dan menjaga agar data dan informasi pengguna tetap aman.
Penting untuk memahami pengaturan dan konfigurasi yang tepat saat menerapkan CSP, sehingga kamu dapat memastikan kebijakan keamanan yang sesuai dan efektif untuk melindungi situs web kamu.
Baca Juga : Panduan Fitur CSP (Content Security Policy) untuk Mencegah Serangan XSS
Pindai secara teratur
Kerentanan XSS bisa muncul karena kesalahan dari pengembang atau melalui penggunaan library, modul, atau perangkat lunak dari sumber eksternal. Dalam mencegah masalah ini, penting untuk secara rutin memeriksa keamanan aplikasi web kamu dengan alat pemindai kerentanan web.
Melalui langkah ini, kamu dapat lebih cepat menemukan dan mengatasi masalah keamanan pada situs web kamu, sehingga memastikan situs kamu tetap aman dari serangan XSS yang berpotensi merugikan.