Rate Limiter Menggunakan Redis : Halangi Pengguna Mengirimkan Banyak Request Login
Tidak menutup kemungkinan applikasi yang anda buat akan di serang bruto force kan ? Atau apakah applikasi anda sering di jahilin oleh pengguna yang tidak bertanggung jawab untuk mencoba login beberapa kali dalam waktu yang singkat, bahkan tidak cukup 1 detik jika pengguna tersebut menggunakan bot. Nah artikel ini akan memberikan solusi serta pencerahan kepada anda bagaimana mengatasi permasalahan tersebut dengan cara mengimplementasikan rate limiter dengan Redis.
Artikel ini akan membahas tentang bagaimana cara rate limiter bekerja, serta mengapa sih kita menggunakan redis sebagai detection batasan request dari pengguna. Dengan teknik ini anda dapat mencegah spam login, meningkatkan keamanan aplikasi, dan menjaga kinerja server tetap stabil. Lets Go.
Apa itu Redis
Redis merupakan singkatan dari remote dictionary server yang artinya, redis adalah sistem basis data key dan value yang tersimpan di dalam memory server. Paradigma penyimpanan data dalam redis di simpan dalam bentuk pair ( key - value ). key bisa di gunakan untuk primary key sedangkan value adalah data dari key itu sendiri.
Jadi yaa redis ini merupakan database yang No SQL yaa. di karenakan data yang di masukan akan tersimpan di dalam memory server. Tapi anda juga bisa menyimpan data di dalam disk juga loh jika menggunakan redis, jadi data yang berada dalam disk akan di jadikan backup ketika redis berjalan ulang.
Jadi apa hubungannya Redis NoSql database dengan rate limiter ? Mari kita bahas dulu tentang cara kerja limiter gimana sih.
Bagaimana Rate Limiter Bekerja
Rate limiter merupakan mekanisme yang dapat digunakan untuk mengontrol jumlah request yang di kirimkan ke server. Yang pasit Tujuan dari rate limiter ini adalah mencegah beban berlebihan pada server, melindungi dari serangan DDoS dan BruteForce serta memastikan keadilan dalam penggunaan sumber daya. Berikut adalah cara kerja rate limiter :
Rate limiter menetapkan batas atau limit pada jumlah permintaan yang dapat dilakukan dalam periode waktu tertentu. Misalnya, jika pengguna memaksa login berkali kali dengan username yang salah, maka akan terjadi limiter pada device pengguna yang maksimal 3 kali percobaan login per 1 jam.
Jadi apa yang akan terjadi jika pengguna terkena batas permintaan ( rate limiter ) ? Yupss pastinya server akan mereject atau menolak permintaan langsung dengan pesan kesalahan seperti to many request. Atau IP dari pengguna tersebut akan diblokir sementara waktu.
Mengapa Memilih Redis Untuk Bantuan Rate Limiter
Ada beberapa alasan mengapa redis menjadi opsi yang dapat di gunakan jika kita ingin mengimplementasikan rate limiter pada applikasi :
1. Kecepatan Tinggi
Redis adalah penyimpanan data dalam memori server, sehingga sangat cepat dalam membaca dan menulis data. Ini penting untuk aplikasi dengan permintaan tinggi dan membutuhkan respons waktu nyata seperti deteksi batasan permintaan.
2. Skalabilitas
Redis dapat dengan mudah diskalakan secara horizontal melalui clustering. Untuk aplikasi dengan lalu lintas tinggi, Redis mampu menangani jutaan permintaan per detik dengan distribusi beban di beberapa node.
3. Dukungan Struktur data yang sederhana
Redis menyediakan berbagai struktur data yang cocok untuk algoritma rate limiting :
- Hash : Untuk menyimpan informasi rate limiting lebih kompleks (misalnya, batasan untuk setiap endpoint).
- String : Informasi dapat kita simpan sebagai hitungan permintaan.
4. Mudah di integrasikan
Redis memiliki pustaka untuk hampir semua bahasa pemrograman populer. Ini membuatnya mudah diintegrasikan ke dalam sistem yang sudah ada, baik untuk backend berbasis Golang, Java, NodeJS.
Contoh Implementasi Redis dalam Rate Limiter
Misalnya dalam contoh kasus, applikasi anda memiliki banyak fitur dan sebelum mengakses fitur tersebut pengguna harus login terlebih dahulu. Nah pada fitur login, kita bisa implementasikan rate limiter di back-end nya agar pengguna tidak sesuka hati menekan tombol login terus menerus yang dapat menyebabkan banyaknya request ke dalam server.
Contohnya anda dapat membatasi login pengguna yang hanya dapat melakukan login sebanyak 3 kali jika username/password nya salah. dan memblokir ip pengguna selama 30 menit agar bisa login kembali.
- Pengguna hanya diperbolehkan salah memasukkan username/password maksimal 3 kali dalam periode tertentu.
- Jika batas tercapai, pengguna akan diblokir selama 30 menit untuk mencoba login kembali.
- Pembatasan ini berlaku berdasarkan IP pengguna agar tidak membebani server dan melindungi akun pengguna.
Posting Komentar