Mencegah Node API Dari Serangan Hacking
Kehidupan sehari-hari seorang yang bergelut dalam developer aplikasi tentu penuh dengan problem. Dan dari waktu ke waktu, kami menemukan penemuan keamanan. Namun, jika Anda sedang mengerjakan proyek besar untuk perusahaan besar, berita ini bisa sangat berbahaya.
Jika Anda belum pernah mendengar istilah seperti XSS, serangan DOS, serangan injeksi SQL / NoSQL dan lainnya, maaf, tapi saya tidak benar-benar menulis kode dengan aman.
Oke, bagaimana saya bisa melakukannya dengan tepat? Mulai sekarang, saya tahu penyerang ini sangat berbahaya. Ini berarti bahwa aplikasi Anda (atau API) harus seaman mungkin.
Dalam artikel ini, kami ingin membantu Anda dengan memberikan beberapa praktik terbaik yang dapat Anda terapkan untuk mengatasi temuan keamanan ini di lingkungan kerja Anda sehari-hari. Tapi pertama-tama, jika Anda baru mengenalnya, coba uraikan satu per satu.
Cross-Site Scripting(XSS)
Pada dasarnya, serangan XSS adalah sejenis injeksi penyerang. Penyerang mencari beberapa cara untuk menyisipkan skrip sisi browser yang berbahaya. Jika developer tidak cukup berhati-hati untuk memvalidasi input di sisi server, itu berarti developer kesulitan melakukan validasi di front end. Sayangnya, ini sangat umum.
Penyerang XSS yang berhasil dapat memperoleh akses ke cookie, token sesi, dan data sensitif.
Denial-Of-Service (DOS)
Perilaku ini sangat buruk bagi reputasi aplikasi karena artinya tidak ada yang dapat mengakses aplikasi tersebut. Penyerang melakukan ini dengan terus-menerus mengirimkan permintaan, membuat lalu lintas, dan mengirimkan berbagai jenis informasi dalam jumlah besar. Jika penyerang berhasil dalam serangan DOS, layanan akan melambat atau downtime akan terjadi.
Brute Force
Metode yang digunakan untuk mengambil data sensitif pengguna seperti kata sandi dan nomor identifikasi pribadi (PIN). Penyerang biasanya menggunakan robot untuk menghasilkan banyak tebakan / upaya pada nilai data yang diinginkan. Yaitu, upaya masuk dengan kata sandi acak.
Injeksi NoSQL / SQL
Saya rasa Anda sudah pernah mendengar kata ini. Injeksi memungkinkan penyerang untuk mengeksekusi pernyataan SQL/NoSQL yang berbahaya. Seorang penyerang dapat melewati otentikasi dan otorisasi, mengambil isi dari seluruh database, dan menambah, mengubah, atau menghapus data dalam database.
Nah, tapi sekarang kita perlu mengatasi pertanyaan utama.
Apa cara terbaik untuk menyelesaikan masalah ini?
Jadi, setelah mempelajari setiap penemuan keamanan, saya akan menunjukkan cara mencegah serangan ini satu per satu.
Bagaimana cara mencegah serangan XSS?
Pertama, Anda harus ingat bahwa Anda perlu memvalidasi dan membersihkan parameter. Ini sangat mudah diterapkan, tetapi banyak developer masih melupakannya. Selain itu, ini memvalidasi semua input. Ini adalah cara paling efisien untuk menyelesaikan masalah ini. Standar ini mencegah serangan skrip dan memvalidasi input sisi server.
const validator = require("validator");
const escaped_string = (string) => validator.escape(string);
escaped_string("<yout body content>");
HttpOnly: Pencegahan cookie terhadap XSS
Cara lain untuk mencegah XSS adalah dengan mencegah akses cookie oleh skrip JavaScript browser Anda. Pencurian cookie adalah salah satu serangan XSS yang paling umum. Ini dicapai dengan menyetel nilai cookie httpOnly menjadi true dalam kode di bawah ini.
app.use(
express.session({
secret: "Y4KmzAkw28-122828",
coockie: {
secure: true,
httpOnly:true,
},
})
);
DOS: Pencegahan penolakan layanan
Pertama, untuk mencegah DOS, Anda perlu menentukan batas yang dapat dikirim pengguna ke API/layanan.
Anda dapat mengatur batas ini menggunakan body-parse Express.
const express = require("express");
const app = express();
app.use(express.json({limit : "30kb"}));
Pilihan lain adalah untuk menetapkan batas tingkat pengguna. Jadi pada dasarnya Anda dapat mengatur jumlah maksimum permintaan untuk setiap pengguna. Anda dapat mengunci keluar untuk jangka waktu tertentu setelah pengguna menggunakan semua permintaan.
const rateLimit = require("express-rate-limit");
const apiLimiter = rateLimiter({
windowMs: 15 * 60 * 1000, //15 minutes
max: 100,
message:
"To many request,please try again after an 15 minutes",
});
app.use("pathToRouter",apiLimiter);
Bagaimana mencegah serangan brute force
Cara paling efisien untuk mencegah hal ini adalah dengan menggunakan express-rate-limit untuk menetapkan batas upaya login, seperti yang dijelaskan di atas.
Untuk memperlambat kehidupan penyerang dan membuatnya sedikit lebih sulit saat menebak data sensitif (kata sandi, PIN), Anda perlu menerapkan dependensi bcrypt. Bcrypt mengenkripsi data sensitif seperti kata sandi, sehingga sulit ditebak.
Anda juga dapat menerapkan MFA (Multi-Factor Authentication). Ini membuat mekanisme otentikasi menjadi lebih aman.
Dependensi dan paket
Kami tahu bahwa NPM menyediakan cara mudah untuk mengintegrasikan beberapa paket ke dalam aplikasi Anda. Namun, Anda harus berhati-hati untuk tidak mengekspos diri Anda pada risiko keamanan paket lama.
Selain itu, harus dipantau untuk memastikan bahwa semua paket mutakhir, jika perlu.
Ini dapat dengan mudah dilakukan dengan perintah npm audit, dan Anda dapat menjalankan npm audit fix untuk memperbaiki masalah yang dapat diperbaiki secara otomatis.
Paket penting lainnya yang sangat membantu Anda adalah helmet. Helmet membantu melindungi aplikasi Express dengan mengatur berbagai header HTTP. Ini bukan peluru perak, tapi berguna.
Kesimpulan
Seperti disebutkan sebelumnya, developer perlu bekerja keras jika target mereka adalah untuk memastikan stabilitas, keandalan, daya tahan, dan keamanan layanan mereka.
Karena jenis kelemahan keamanan di atas lebih umum, kami telah menunjukkan kepada Anda beberapa cara untuk memperluas aplikasi Node Anda agar berjalan dengan aman dan meminimalkan risiko keamanan.
Semoga ini membantu Anda menulis kode aman!