Cross-site scripting (XSS) adalah jenis eksploitasi keamanan yang memungkinkan penyerang menyuntikkan skrip berbahaya ke situs web menggunakan kode klien. Ini menimbulkan ancaman yang signifikan karena penyerang dapat menggunakannya untuk menyamar sebagai pengguna, mendapatkan akses ke data sensitif, atau bahkan mengubah konten halaman situs web.
Sangat berbahaya sehingga pada tahun 2021, itu adalah nomor dua dalam daftar pencacahan kelemahan umum dari 25 kelemahan paling berbahaya. Ini berarti jika Anda membuat situs web, Anda harus tahu tentang skrip lintas situs dan cara mencegahnya.
Bagaimana Cara Kerja Skrip Lintas Situs?
Sebelum memahami cara kerja skrip lintas situs, penting untuk mengetahui apa yang dimaksud dengan kebijakan asal yang sama (SOP). SOP adalah kebijakan mekanisme keamanan yang membatasi sebuah situs web (satu asal) dari membaca atau menulis ke situs web lain (asal yang berbeda). Ini mencegah situs web jahat mengirim kode berbahaya ke situs web tepercaya.
Serangan skrip lintas situs mencoba mengabaikan kebijakan ini dengan memanfaatkan ketidakmampuan browser untuk membedakan antara HTML yang sah dan kode berbahaya. Misalnya, penyerang dapat menyuntikkan kode JavaScript ke situs web target. Misalkan browser mengeksekusi kode, dan penyerang memperoleh akses ke token sesi, cookie, dan data sensitif lainnya.
Ada tiga jenis skrip lintas situs yang digunakan peretas untuk merusak situs web: tercermin, disimpan, dan DOM XSS.
Cara Mencegah Scripting Lintas Situs di Node
Berikut ini adalah beberapa langkah yang dapat Anda ambil untuk mencegah skrip lintas situs di Node.js.
Sanitasi Masukan
Penyerang harus dapat mengirim data ke aplikasi web Anda dan menampilkannya kepada pengguna untuk melakukan serangan XSS. Oleh karena itu, tindakan pencegahan pertama yang harus Anda lakukan adalah membersihkan semua input yang diterima aplikasi Anda dari penggunanya. Ini sangat penting karena mendeteksi data palsu sebelum server mengeksekusinya. Anda dapat melakukan ini secara manual atau menggunakan alat seperti validator yang membuat proses lebih cepat.
Misalnya, Anda dapat menggunakan validator untuk menghindari tag HTML di input pengguna seperti di bawah ini.
impor validator dari "validator";
biarkan input pengguna = `Jane <skrip dimuat ="peringatan('Peretasan XSS');"></script>`;
membiarkan sanitizedInput = validator.escape (userInput);
Jika Anda menjalankan kode di atas, output yang disanitasi adalah ini.
Jane < skrip dimuat =&kutipan; peringatan('peretasan XSS');&kutipan;></ naskah>
Batasi Masukan Pengguna
Batasi jenis input yang dapat dikirimkan pengguna di formulir Anda melalui validasi. Misalnya, jika Anda memiliki kolom input untuk email, hanya izinkan input dengan format email. Dengan cara ini, Anda meminimalkan kemungkinan penyerang mengirimkan data yang buruk. Anda juga dapat menggunakan paket validator untuk ini.
Terapkan Kebijakan Cookie Hanya HTTP
Cookie menyimpan data dalam cache lokal dan mengirimkannya kembali ke server melalui HTTP. Tetapi penyerang juga dapat menggunakan JavaScript untuk mengaksesnya melalui browser, sehingga mereka menjadi sasaran empuk.
Cookie khusus HTTP adalah kebijakan yang mencegah skrip sisi klien mengakses data cookie. Ini berarti bahwa meskipun aplikasi Anda mengandung kerentanan dan penyerang mengeksploitasinya, mereka tidak akan dapat mengakses cookie.
Berikut adalah contoh bagaimana Anda dapat menerapkan kebijakan cookie khusus HTTP di Node.js menggunakan Express:
aplikasi.menggunakan(cepat.sidang({
rahasia: "rahasia",
Kue kering: {
httpHanya: BENAR,
aman: BENAR
}
}))
Jika penyerang mencoba mengakses cookie dengan httpOnly tag disetel ke true seperti yang ditunjukkan di atas, mereka akan menerima string kosong.
Pembuatan Skrip Lintas Situs Adalah Sasaran Mudah Peretas
Meskipun memastikan keamanan aplikasi Anda sangat penting, penerapannya bisa menjadi rumit. Dalam posting ini, Anda belajar tentang serangan skrip lintas situs dan bagaimana Anda dapat mencegahnya di Node.js. Karena penyerang memanfaatkan kerentanan dalam aplikasi Anda untuk menyuntikkan kode berbahaya ke server Anda, selalu pastikan Anda membersihkan input pengguna. Dengan melakukan ini, Anda menghapus kode berbahaya sebelum aplikasi Anda menyimpannya atau menjalankannya.