Mencegah Pembuatan Cross-Site Scripting pada Node.js
Artikel ini akan membantu pembaca memahami apa itu serangan Cross-Site Scripting (XSS), cara kerja XSS, dan cara XSS membingungkan situs web. Ini juga menjelaskan cara mencegah kerentanan ini pada platform Node.js. Keamanan komputer memainkan peran penting dalam menjaga dan melindungi informasi yang disimpan dalam aplikasi web.
Saat ini, aplikasi web lebih diutamakan jika ingin dapat mengakses layanan dan informasi melalui World Wide Web (WWW). Aplikasi web menyediakan banyak layanan di Internet, seperti e-business dan Internet banking.
Meskipun ada upaya untuk melindungi aplikasi web, mereka masih mengalami pelanggaran dan serangan serius. Serangan ini mengancam keamanan aplikasi web. Salah satu serangan tersebut dikenal sebagai serangan cross-site scripting (XSS).
Serangan Cross-Site Scripting adalah masalah keamanan umum dalam keamanan web modern. Serangan XSS dilakukan oleh penyerang yang menggunakan aplikasi web rentan untuk menyuntikkan kode berbahaya.
Kode berbahaya dijalankan di browser dan penyerang mencuri cookie dari pengguna akun dan mengambil informasi sensitif di aplikasi web.
Penyisipan kode berbahaya dapat menempatkan situs web di bawah kendali penyerang. Ada solusi untuk serangan ini, baik di sisi client maupun di sisi server.
Prasyarat
Untuk memahaminya dengan mudah, Anda perlu memahami Node.js dan JavaScript.
Apa itu Cross-Site Scripting (XSS)?
Cross-site scripting (XSS) adalah serangan injeksi kode terhadap aplikasi web. Penyerang menggunakan situs web yang rentan untuk menyuntikkan kode atau skrip berbahaya. XSS memungkinkan penyerang untuk menyuntikkan kode berbahaya menggunakan bahasa scripting seperti JavaScript.
Kode berbahaya berjalan di browser pengguna. Penyerang dapat mengakses cookie, kata sandi, dan informasi sensitif lainnya yang disimpan oleh browser.
Aplikasi web rentan terhadap XSS jika input pengguna tidak dikodekan dengan benar. Jika input pengguna tidak dikodekan dengan benar, skrip berbahaya akan dikirim ke pengguna untuk dieksekusi.
Penyebab utama serangan XSS adalah validasi input dan sanitasi data yang diberikan oleh pengguna aplikasi web.
Cara kerja XSS
XSS bekerja dengan mengeksploitasi aplikasi web yang rentan. Penyerang mengirimkan kode berbahaya kepada pengguna untuk dieksekusi. Saat skrip berbahaya dijalankan, penyerang dapat berinteraksi dengan aplikasi.
Untuk mencegah XSS, developer perlu mengetahui cara kerja XSS. Jalankan skenario ini untuk memahami cara kerja XSS.
XYZ adalah situs e-commerce yang menjual produk ke client. Data item dikirim ke server dan disimpan dalam database. Jika Anda perlu membeli barang, Anda perlu membuat akun dan memastikan Anda adalah pengguna sah situs web tersebut. Pengguna masuk ke situs web. Sistem harus memverifikasi bahwa pengguna yang Anda coba masuki adalah pengguna sah situs web Anda sebelum Anda dapat memperoleh akses.
Sementara itu, penyerang membuat hyperlink dan memasukkan kode JavaScript. Kode ini membaca cookie pengguna yang mengakses halaman web. Script dikirim, diproses dan disimpan dalam database.
Pengguna web (korban) mengklik tautan dan menjalankan kode di browser. Kode berbahaya membaca cookie dan mengirimkannya ke server web penyerang.
Penyerang menggunakan aplikasi web yang rentan untuk menyebarkan serangan ke pengguna web. Penyerang juga dapat memodifikasi situs yang terpengaruh dan mencuri nama pengguna dan kata sandi dari akun pengguna. Cookie menyimpan sesi pengguna, sehingga penyerang menerima ID digital pengguna. Penyerang memuat cookie pengguna ke dalam browser dan menyamar sebagai pengguna sebagai aplikasi web.
Seorang penyerang dapat melihat dan mengeksekusi apapun yang pengguna memiliki hak untuk melihat dan mengeksekusi sesi pengguna. Cookie pengguna diteruskan ke server dan diverifikasi. Jika cookie berisi sesi pengguna saat ini, server yakin bahwa permintaan tersebut berasal dari pengguna yang sah.
Selama waktu ini, pengguna tidak menyadari bahwa serangan sedang terjadi. Ini adalah cara kerja serangan XSS.
Kerentanan Cross-Site Scripting adalah:
- Mudah ditemukan.
- Mudah digunakan.
- Ini memiliki dampak besar pada keamanan bisnis Anda.
Jenis serangan XSS
Di bawah ini adalah berbagai jenis serangan XSS.
Cross-Site Scripting yang direfleksikan
Reflect XSS (Non-persistent XSS) adalah serangan yang terjadi saat skrip berbahaya dialihkan ke aplikasi melalui HTTP. Dalam XSS non-persisten, kode berbahaya langsung berjalan di browser korban.
Jika server gagal mengkodekan input pengguna dengan benar, penyerang dapat mencari string <script> alert ('XSS!') </ Script> seperti itu. Kode JavaScript ini tercermin di browser sebagai bagian dari kode. Kemudian kode dieksekusi dan peringatan ditampilkan yang mengonfirmasi kerentanan XSS. Berikut ini adalah contoh serangan XSS yang direfleksikan.
Tautan HTTP sebelum kode berbahaya dimasukkan
https://example-webapp.com/report =Safe
Cara melakukan serangan
https://example-webapp.com/report =<script>\/*Not+Safe…?+*/</script>
Saat pengguna mengakses URL yang dikirim oleh penyerang, skrip berbahaya segera dieksekusi di browser. Cross-Site Scripting yang disimpan
Saved XSS (Persistent XSS) terjadi ketika skrip berbahaya disimpan ke database situs web. Skrip berbahaya dijalankan saat pengguna mengunjungi aplikasi web. Saat korban membuka browser, skrip berbahaya dijalankan. Cross-Site Scripting berbasis DOM
Ini adalah serangan terhadap DOM (Document Object Model). Ini terjadi ketika skrip berbahaya dijalankan karena DOM telah berubah di browser pengguna. Sebagian besar developer tidak memahami cara kerja XSS berbasis DOM.
Bagaimana mencegah XSS
XSS adalah serangan besar pada aplikasi web. Sekarang Anda memiliki pemahaman yang lebih baik tentang XSS dan bagaimana hal itu dapat merusak aplikasi Anda. Menjelaskan teknik yang digunakan oleh Node.js untuk mencegah kerentanan XSS:
Output encoding
Pengkodean keluaran mengubah masukan yang tidak tepercaya menjadi model yang aman. Ini dilakukan dengan menjalankan penyandian entitas JavaScript di server platform Node.js sebelum mengirim data yang tidak dipercaya ke browser. Hindari memasukkan data yang tidak tepercaya
developer harus menolak untuk memasukkan data yang tidak dipercaya untuk mencegah XXS. Jika data yang tidak dipercaya dimasukkan ke dalam kode JavaScript Anda, Anda harus menggunakan pelarian JavaScript. Jangan meneruskan data yang tidak tepercaya ke fungsi JavaScript yang dapat dieksekusi seperti eval. Fungsi eval mengevaluasi atau mengeksekusi argumennya.
Fungsi evaluasi Node.js memungkinkan injeksi kode. Injeksi kode adalah kerentanan keamanan yang disebabkan oleh pemrosesan data yang tidak valid. Penyerang memperkenalkan kode berbahaya yang berjalan di aplikasi Anda.
Fungsi eval mengambil argumen string dan menafsirkannya sebagai kode JavaScript sehingga penyerang dapat mengeksekusinya. Berikut ini adalah contoh meneruskan data yang tidak tepercaya ke fungsi eval yang menjalankan skrip.
Dalam contoh sederhana ini, mengetik kode seperti alert ('XSS!') Akan mengeksekusi kode. Dengan salah satu operasi.
function compute() {
var opr1 = $('#operation1').val();
var opr2 = $('#operation2').val();
var answer = eval(opr1 + ' + ' + opr2);
$('#answer').text(answer);
}
Satu-satunya cara aman untuk memasukkan data yang tidak dipercaya ke dalam kode JavaScript Anda adalah di dalam nilai data yang dikutip (").
Misalnya,
<script>Alert (“…encode untrusted data before being executed…”)</script>
Menempatkan data yang tidak tepercaya dalam skrip berbahaya. Sangat mudah bagi penyerang untuk beralih ke konteks eksekusi menggunakan karakter seperti (;, =, +, &, <,>).
Verifikasi masukan pengguna
Untuk mencegah XSS, developer perlu memvalidasi input pengguna dan mengkodekan output. Validasi input pengguna adalah teknik pertahanan yang digunakan di sisi server untuk mencegah serangan XSS. Ini berarti bahwa mitigasi XSS akan diterapkan ke platform Node.js.
Validasi input dilakukan untuk memastikan bahwa hanya data aman yang dimasukkan ke dalam sistem informasi. Verifikasi input pengguna harus dilakukan segera setelah data diterima dari pihak lain.
Gunakan skrip berikut untuk mencegah XSS karena validasi input.
var validator = require('validator');
var escaped_string = validator.escape(string);
Memvalidasi input sebelum memproses permintaan penyerang penting untuk mencegah serangan XSS lebih awal. Validasi input mendeteksi input pengguna yang tidak sah sebelum aplikasi berjalan. Karakter khusus seperti (. Dan \) harus difilter untuk mencegah penggunaan yang berbahaya.
Melakukan validasi input sisi server sangat penting untuk mencegah serangan XSS. Sisi server terutama cocok untuk validasi input karena dapat dengan mudah dilewati dengan menjalankannya melalui sisi client.
Coba modul npm strip-js sambil memvalidasi input pengguna dengan JavaScript sisi server (Node.js).
Lakukan hal berikut:
- Sanitasi datanya.
- Hapus tag skrip.
- Hapus atribut yang berisi kode JavaScript: onclick dan onerror.
- Hapus atribut "href" di kode JavaScript Anda.
Sanitasi masukan
Sanitasi input adalah metode pencegahan XSS yang menyaring dan membersihkan input data untuk pengguna aplikasi. Sanitasi input menghilangkan nilai yang salah dari data.
Masukan yang disanitasi dengan benar memungkinkan pengguna hanya mengirim data tepercaya. Pastikan hanya data yang diharapkan yang dimasukkan. Artinya, ini hanya mengizinkan bidang input untuk menerima tanda kurung, angka, dan tanda hubung. Dengan membersihkan data dalam permintaan HTTP sebelum dijalankan, data divalidasi, diloloskan, dan difilter sebelum dikeluarkan ke pengguna.
HttpOnly: Pencegahan cookie terhadap XSS
Cara lain untuk mencegah XSS adalah dengan mencegah akses cookie oleh skrip JS browser Anda. Pencurian cookie adalah salah satu serangan XSS yang paling umum. Ini dicapai dengan menyetel nilai cookiehttpOnly menjadi true dalam kode di bawah ini.
app.use(express.session({
secret: "k5Zurj4",
cookie: {
httpOnly: true,
secure: true
}
})
)
Menyetel nilai httpOnly dari cookie ke true membantu mencegah skrip sisi client mengakses cookie yang dilindungi. HttpOnly memberi tahu browser untuk tidak mengekspos cookie ke skrip.
Kesimpulan
Cross-Site Scripting adalah masalah keamanan utama yang dihadapi aplikasi web. Pada artikel ini, Anda mempelajari apa itu XSS dan betapa berbahayanya itu. Saya juga belajar bagaimana mencegahnya di platform sisi server (Node.js).
Untuk meringkas:
- Pembaca telah mempelajari apa itu Cross-Site Scripting.
- Bagaimana XSS bekerja.
- Jenis serangan XSS.
- Pembaca telah mempelajari cara mencegah serangan XSS pada platform node.js.
Kami harap artikel ini akan membantu Anda memahami XSS dan cara mencegah XSS di platform sisi server.
Selamat belajar!