‫Instruktur: Dalam kuliah ini mari kita terapkan
‫pembatasan kecepatan untuk mencegah
‫IP yang sama membuat terlalu banyak permintaan ke
‫API kita dan itu akan membantu kita
‫mencegah serangan seperti penolakan layanan, atau serangan brute force.
‫Jadi, pembatas kecepatan itu akan diimplementasikan
‫sebagai fungsi middleware global.
‫Jadi, pada dasarnya, apa yang akan dilakukan oleh
‫rate limiter, adalah menghitung jumlah permintaan yang datang dari satu
‫IP dan kemudian, ketika
‫ada terlalu banyak permintaan, blokir permintaan ini, oke?
‫Jadi masuk akal untuk mengimplementasikannya di middleware
‫global, jadi, kami melakukannya di app. js.
‫Jadi, kita sudah lama tidak menggunakan yang ini, dan
‫rate limiter yang akan
‫kita gunakan adalah paket npm bernama Express Rate Limit.
‫Jadi mari kita instal itu.
‫npm saya express-rate-limit, oke.
‫Dan kemudian, di sini di bagian atas
‫aplikasi kita, sebut saja rateLimit dan kemudian memerlukan ekspres dan
‫sebenarnya sudah ada di sini Jadi kode VS mengambil nama
‫ini dari paket kami. berkas json.
‫Oke, dan nama yang saya
‫berikan di sini biasanya berasal dari dokumentasi.
‫Jadi jika mereka melakukannya seperti ini
‫di dokumentasi, maka itu cara yang saya ikuti juga.
‫Oke, jadi sekarang mari kita gunakan
‫middleware ini di atas middleware global kita, mari kita
‫tulis di sini, global.
‫Dan kita mulai dengan membuat pembatas.
‫Jadi pembatas, dan kami melakukannya dengan
‫memanggil fungsi rateLimit yang baru saja kami definisikan di sana.
‫Jadi rateLimit adalah fungsi
‫yang menerima objek opsi, oke?
‫Dan di sini, pada dasarnya
‫kita dapat menentukan berapa banyak permintaan per IP yang akan
‫kita izinkan dalam jangka waktu tertentu.
‫Jadi kita bisa menentukan properti max, yang
‫akan saya set ke 100, dan kemudian juga
‫jendelanya, jadi jendela waktunya, oke?
‫Jadi yang ingin saya izinkan di sini pada
‫dasarnya adalah, 100 permintaan per jam.
‫Dan ini di sini sebenarnya disebut milidetik jendela.
‫Oke, jadi kita ingin satu jam jadi
‫60 menit, kali 60 untuk detik, kali 1.000 untuk milidetik.
‫Baiklah, sekali lagi, yang akan dilakukan
‫adalah mengizinkan 100 permintaan dari IP yang sama dalam satu jam.
‫Oke, dan jika batas itu kemudian
‫dilanggar oleh IP tertentu, mereka akan mendapatkan kembali pesan kesalahan.
‫Dan di sini kita sekarang dapat menentukan pesan itu.
‫Terlalu banyak permintaan dari IP ini, silakan
‫coba lagi dalam satu jam, baiklah, jadi kami perlu
‫menemukan keseimbangan yang
‫paling cocok untuk aplikasi kami.
‫Misalnya, jika Anda sedang membangun
‫API, yang sangat membutuhkan banyak permintaan untuk satu IP, maka tentu
‫saja jumlah ini di sini harus lebih besar.
‫Jadi jangan hanya mengikuti secara membabi buta apa yang baru saja
‫saya taruh di sini, tetapi benar-benar menyesuaikannya dengan aplikasi Anda
‫sendiri sehingga Anda tidak membuatnya
‫tidak dapat digunakan karena pembatas ini, oke?
‫Bagaimanapun, pembatas ini sekarang di sini yang baru saja kita
‫buat pada dasarnya adalah fungsi middleware, oke?
‫Jadi, rateLimit adalah fungsi yang akan,
‫berdasarkan objek kita, membuat fungsi middleware, yang sekarang
‫dapat kita gunakan menggunakan app. gunakan seperti yang kita lakukan sebelumnya.
‫Dan kita bisa melakukannya dengan sederhana seperti ini.
‫Tapi yang sebenarnya kami inginkan
‫adalah membatasi akses ke rute API kami.
‫Jadi, kita dapat menentukannya di
‫sini, ingat bahwa kita dapat melakukannya dengan middleware.
‫Jadi, pada dasarnya kami ingin menerapkan pembatas ini
‫hanya pada slash API, oke?
‫Dan itu kemudian akan memengaruhi
‫semua rute yang pada dasarnya dimulai dengan ini,
‫aplikasi Anda jadi meneruskan slash API, bagus.
‫Jadi mari kita kembali ke tab utama kita di sini.
‫Simpan, dan sekarang mari kita coba ini dan mari kita
‫lakukan di sini dengan yang
‫paling sederhana, jadi dapatkan semua tur, lalu inilah hasil kami dan sekarang
‫yang ingin saya tunjukkan adalah tajuk ini di sini.
‫Jadi rate limiter kami
‫membuat dua header ini jadi RateLimit-Limit, dan RateLimit-Remaining, oke?
‫Jadi kita mulai dengan 100 seperti yang kita
‫definisikan, dan sekarang kita punya
‫sisa, 99, karena kita sudah melakukan satu permintaan, kan?
‫Jadi apa yang terjadi jika kita melakukan satu sama lain?
‫Mari kita lakukan dengan Get Tour, misalnya, dan
‫tidak ada tur dengan
‫ID itu, tetapi itu tidak masalah,
‫yang penting di sini adalah yang tersisa sekarang menjadi 98.
‫Dan jika kita mencobanya lagi, maka
‫Anda akan melihat bahwa itu bahkan turun lebih jauh ke 97, oke?
‫Dan sebenarnya di bawah sini, kami juga melakukan reset.
‫Jadi pada dasarnya stempel waktu di mana itu disetel ulang, oke?
‫Sehingga satu jam jendela yang kita tentukan sebelumnya.
‫Oke, sekarang jika di antara ini aplikasi kita di-restart, jadi
‫untuk melakukan itu saya akan menyimpannya.
‫Mari kita lihat apa yang terjadi kemudian, oke, jadi
‫saya mengirimnya lagi, dan sekarang
‫kita kembali mulai dari awal pada dasarnya.
‫Oke, jadi aplikasi kita tidak bisa mogok selama ini karena
‫jika tidak, itu pada
‫dasarnya akan mengatur ulang batas juga, oke?
‫Sekarang, mari kita coba melihat pesan kesalahannya,
‫jadi saya akan menurunkan maksimum ini menjadi hanya tiga, oke?
‫Dan simpan di sini, kirim permintaan ini, dan di header kita, kita
‫sekarang melihat kita
‫hanya memiliki dua yang tersisa, mari kita coba yang lain
‫dan sekarang tidak ada lagi yang tersisa, jadi ini
‫mungkin yang terakhir, mari kita lihat tubuhnya,
‫jadi kali ini, kita masih
‫mendapat data, tetapi jika kami mencobanya lagi, kami mendapat kesalahan.
‫Banyak sekali request dari IP ini.
‫Dan kemudian secara otomatis
‫akan mengatur kode status menjadi 429 yang berarti terlalu banyak permintaan.
‫Oke, dan sekali lagi, ini akan membantu kita
‫mencoba mencegah penolakan layanan dan juga serangan brute force di
‫mana penyerang mencoba menebak
‫kata sandi beberapa pengguna, pada dasarnya
‫dengan menggunakan seperti namanya, brute force.
‫Oke, jadi itu pembatasan API, cukup
‫mudah diterapkan dengan paket Batas
‫Tarif Ekspres ini.