Hız sınırlama, bir ağdaki trafiği kontrol etmek için kullanabileceğiniz bir stratejidir. Bir kullanıcının belirli bir zaman dilimi içinde yapabileceği istek sayısını sınırlar.

Limit Ekspres Uygulamaları Nasıl Derecelendirilir?

Her biri kendi değiş tokuşuna sahip çeşitli oran sınırlama algoritmaları mevcuttur. Basit ve popüler bir yöntem, isteklerin IP adreslerini izlemek ve istekler arasında ne kadar zaman geçtiğini kontrol etmektir. Sistem, IP adresi sınırın izin verdiği istek sayısını aşarsa isteği reddedebilir.

Hız sınırlamaya yönelik bu yaklaşımı, yalnızca birkaç adımda bir NodeJS-Express uygulamasında oluşturmak kolaydır.

1. Adım: Bir Geliştirme Ortamı Oluşturma

Öncelikle, bir Express uygulaması oluşturmanız ve başlatmanız gerekir.

Çalıştırarak bir proje dizini oluşturarak başlayın:

mkdir express-app

Ardından çalıştırarak bu dizini girin:

cd express-app

Ardından, düğüm paketi yöneticisi olan npm’yi başlatın ve aşağıdakileri çalıştırarak uygulamanızda bir package.json dosyası oluşturun:

npm init -y

-y bayrağı, package.json dosyanızı tüm varsayılan ayarlarla oluşturacaktır.

Ardından, bazı bağımlılıklar kurmanız gerekecek. Bu öğretici için gereken bağımlılıklar şunlardır:

ExpressJS : ExpressJS , web ve mobil uygulamalar için sağlam bir dizi özellik sağlayan bir NodeJS çerçevesidir . NodeJS ile arka uç uygulamaları oluşturma sürecini basitleştirir.

Ekspres Hız Limiti : Ekspres hız sınırı, ExpressJS için hız sınırlayıcı bir ara katman yazılımıdır. Parola sıfırlama, kullanıcı oturum açma vb. gibi genel API’lere ve/veya uç noktalara yönelik yinelenen istekleri sınırlar.

Çalıştırarak gerekli bağımlılıkları kurun:

npm install express express-rate-limit

2. Adım: Ekspres Uygulama Oluşturma

Uygulamanıza yapılan istekleri dinleyen temel bir Express sunucusu oluşturmanız gerekecek.

Öncelikle, projenizin kök dizininde bir index.js dosyası oluşturun. Bu, uygulamanız için giriş dosyası olacaktır.

Ardından, index.js dosyanıza aşağıdaki kodu ekleyin :

// index.js

const express = require(“express”);

const app = express();

const port = process.env.PORT || 3000

app.listen(port, () => {

console.log(`App running on port ${port}`);

});

Bu kod, express’i içe aktarır ve express ()’i çağırarak ve dönüş değerini app değişkeninde depolayarak bir Express uygulaması oluşturur. Ardından , uygulama nesnesinde listen yöntemini çağırarak 3000 numaralı bağlantı noktasındaki trafiği dinler.

3. Adım: Rota İşleyicileri Oluşturma

Ardından, hız sınırlayıcı çözümü uygulayabileceğiniz bazı rota işleyicileri oluşturun.

Öncelikle, projenizin kök dizininde aşağıdakileri çalıştırarak bir klasör, yollar oluşturun:

mkdir routes

Routes klasörünüzün içinde bir route.js dosyası oluşturun ve aşağıdaki kodu ekleyin:

const express = require(“express”);

const router = express.Router();

router.get(“/”, (req, res) => {

res.send({ message: “Hello, this is a GET request” });

});

router.post(“/add-demo”, (req, res) => {

res.status(201).send({ message: “Resource created successfully” });

});

router.put(“/update-demo”, (req, res) => {

res.status(201).send({ message: “Resource updated sucessfully” });

});

module.exports = router;

Bu kod, express öğesini içe aktarır , express üzerinde Router yöntemini çağırır ve değeri router değişkeninde depolar . Yönlendirici yöntemi , modüler, monte edilebilir rota işleyicileri oluşturmanıza olanak tanır. ” / ” için bir GET isteği, ” /add-demo ” için bir POST isteği ve ” /update-demo ” için bir PUT isteği için rota işleyicileri oluşturabilirsiniz . Son olarak, yönlendirici değişkenini dışa aktarın .

Ardından, yönlendirici değişkenini index.js dosyanıza aktarın:

// index.js

const routes = require(“./routes/routes”);

Ardından, onu index.js dosyanızda bir ara yazılım olarak kullanın:

// index.js

app.use(routes);

Yukarıdaki kod bloğunu app.listen çağrısından önce yerleştirdiğinizden emin olun .

4. Adım: Hız Sınırlamanın Uygulanması

İlk önce, aşağıdakileri çalıştırarak projenizin kök dizininde bir ” orta katman yazılımı ” klasörü oluşturun:

mkdir middleware

Ardından , ara yazılım dizini içinde “ rate-limiter.js ” adlı bir dosya oluşturun . Bu dosyaya aşağıdaki kodu ekleyin:

// rate-limiter.js

const rateLimiter = require(“express-rate-limit”);

const limiter = rateLimiter({

max: 5,

windowMS: 10000, // 10 seconds

message: “You can’t make any more requests at the moment. Try again later”,

});

module.exports = limiter

RateLimiter işlevi, istek sayısını sınırlamak için koşullar içeren bir yapılandırma nesnesi alır .

Yukarıdaki yapılandırma nesnesindeki özellikler şunlardır:

max : Bu özellik her zaman bir sayı veya sayı döndüren bir işlev olmalıdır. Bir kullanıcının belirli bir zaman aralığında yapabileceği maksimum istek sayısını temsil eder. Bu özellik yapılandırma nesnesinde ayarlanmamışsa varsayılan olarak 5’tir .

windowsMS : Bu özellik her zaman bir sayı olmalıdır. Birkaç isteğin milisaniye cinsinden izin verildiği zaman dilimini temsil eder . Bu özellik yapılandırma nesnesinde ayarlanmamışsa, varsayılan olarak 60000 milisaniye (bir dakika) olur.

mesaj : Bu özellik bir dize , bir JSON nesnesi veya Express’in answer.send yöntemi tarafından desteklenen herhangi bir değer olabilir. Bu özellik yapılandırma nesnesinde ayarlanmamışsa varsayılan olarak “Çok fazla istek var. Lütfen daha sonra tekrar deneyiniz.”

İşlev daha sonra uygulamanıza tekrarlanan istekleri kontrol edecektir. Bir kullanıcı zaman çerçevesi ( windowMS , 10s) içinde limiti ( max , 5) aşarsa , isteği engeller. Ayrıca durum kodu 429 olan “Çok Fazla İstek” hatası verecektir .

Son olarak, index.js dosyanızdaki sınırlayıcı işlevini içe aktarın ve uygulamanızda global bir ara yazılım olarak uygulayın. Bunu, app.use(limiter) öğesini rota ara yazılımının üstüne yerleştirerek yapın. Bu, hız sınırlayıcı çözümü uygulamanızın tüm yollarına uygular.

app.use(limiter);

Oranı Sınırlayan Belirli Rotalar

Belirli rotalara oran sınırlaması da uygulayabilirsiniz. Farklı bir zaman diliminde yapılan istekleri reddetmek, farklı bir mesaj görüntülemek vb. için bunları ayrı ayrı yapılandırabilirsiniz.

Örneğin, uygulamanızda bir kullanıcı oturum açma yolu uyguladığınızı varsayalım. Oturum açma yolu için, diğer yollar tarafından kullanılan yapılandırmadan farklı bir hız sınırlayıcı yapılandırma eklemeniz gerekebilir.

İlk olarak, sınırlayıcıyı uygulama düzeyinde bir ara katman yazılımı olarak kaldırmanız ve uygulamanız gerekir çünkü ExpressJS’de yerleşik bir ara katman yazılımı filtre sistemi yoktur. Dolayısıyla, bir rotaya belirli bir hız sınırlayıcı çözüm ekleseniz bile, küresel ara katman yazılımı o rota üzerinde çalışmaya devam eder.

Ardından, rate-limiter.js dosyanızda yeni bir hız sınırlayıcı yapılandırma oluşturun ve dışa aktarın.

const signInLimiter = rateLimiter({

max: 3,

windowMS: 10000, //10 seconds

message: “Too many sign-in attempts. Try again later.”

})

module.exports = {

limiter,

signInLimiter

}

SignInLimiter yapılandırma nesnesi, genel hız sınırlayıcıdan farklı sayıda maksimum istek ve farklı bir hata mesajına sahiptir.

Son olarak, router.js dosyanızı aşağıdaki kod bloğu ile güncelleyin:

// router.js

const express = require(“express”);

const router = express.Router();

const {limiter, signInLimiter} = require(“../middleware/rate-limiter”)

router.get(“/sign-in”, signInLimiter, (req, res, next) => {

res.send({ message: “Hello, this is a GET request” });

});

router.use(limiter)

router.post(“/post”, (req, res) => {

res.status(201).send({ message: “Resource created successfully” });

});

router.put(“/put”, (req, res) => {

res.status(201).send({ message: “Resource updated sucessfully” });

});

module.exports = router;

Yukarıdaki kod bloğunda, sınırlayıcıyı ve signInLimiter’ı içe aktardınız. Ardından , ” /sign-in ” yoluna belirli bir hız sınırlayıcı olarak signInLimiter uyguladınız.

Son olarak, router.use(limiter) öğesini rotaların geri kalanının üstüne yerleştirerek, limiter’ı rotaların geri kalanı için hız sınırlayıcı olarak uyguladınız.

Hız Sınırlamanın Önemi

Hız sınırlaması, aynı anda çok fazla isteği işlemekten kaçınarak web sunucunuzdaki yükü azaltır. Bot etkinliğini azaltır, sizi Hizmet Reddi (DoS) saldırılarından korur ve kaba kuvvet saldırılarını önler.

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir