Takip et

NestJS’de Rate Limiting Uygulaması: IP ve Cihaz ID Tabanlı Stratejiler

NestJS’de Rate Limiting Uygulaması: IP ve Cihaz ID Tabanlı Stratejiler

Merhaba! Bu yazıda, NestJS uygulamalarınızda rate limiting (hız sınırlama) mekanizmasını nasıl entegre edeceğinizi adım adım açıklayacağım. Rate limiting, belirli bir zaman aralığında yapılan istek sayısını sınırlayarak sunucunuzun aşırı yüklenmesini ve performans düşüşlerini önlemenizi sağlar. Özellikle API’lerinizin kötü amaçlı kullanımlara karşı korunması için son derece önemlidir. Bu rehberde, hem IP tabanlı hem de cihaz ID tabanlı rate limiting stratejilerini ele alacağız.

IP Tabanlı Rate Limiting

IP tabanlı rate limiting, belirli bir IP adresinden gelen istekleri sınırlar. Bu, aynı IP adresinden gelen çok sayıda istekle sunucuyu aşırı yüklemeyi önlemek için etkili bir yöntemdir. Örneğin, belirli bir IP adresinden dakikada 100’den fazla istek gelmesini engelleyebilirsiniz. Bunun için öncelikle bir istek sayacı tutmamız ve bu sayacı her istekte güncellememiz gerekiyor. İşte NestJS’de bunu nasıl yapabileceğimize dair bir örnek:


import { Injectable, NestMiddleware } from '@nestjs/common';
import { Request, Response, NextFunction } from 'express';

@Injectable()
export class RateLimitMiddleware implements NestMiddleware {
  private readonly requests = new Map();

  use(req: Request, res: Response, next: NextFunction) {
    const ip = req.ip;
    const limit = 100; // Dakikadaki maksimum istek sayısı
    const timeWindow = 60000; // Milisaniye cinsinden zaman penceresi

    let count = this.requests.get(ip) || 0;
    const now = Date.now();

    // Eski istekleri temizleme
    this.requests.forEach((value, key, map) => {
      if (now - key > timeWindow) {
        map.delete(key);
      }
    })
    
    if (count >= limit) {
      return res.status(429).send('Too Many Requests');
    }

    count++;
    this.requests.set(ip, count);

    next();
  }
}

Bu middleware, gelen her isteğin IP adresini takip eder ve izin verilen limiti aşarsa 429 (Too Many Requests) hatası döndürür. Bu basit bir örnektir, daha gelişmiş senaryolar için redis gibi bir önbelleğe ihtiyaç duyabilirsiniz. Web sitemde daha karmaşık örnekler bulabilirsiniz.

Cihaz ID Tabanlı Rate Limiting

IP tabanlı limitleme, proxy veya VPN kullanan kullanıcıları doğru bir şekilde sınırlandırmayabilir. Bu yüzden cihaz ID tabanlı rate limiting daha güvenilir bir çözümdür. Cihaz ID’si, cihazın benzersiz bir tanımlayıcısı olabilir (örneğin, UUID). Uygulamanız kullanıcı kimlik doğrulaması yapıyorsa, kullanıcı ID’sini kullanabilirsiniz. Bu yöntem, aynı cihazdan gelen çok sayıda isteği engellemeye yardımcı olur.

Cihaz ID’sini elde etmek için, istek başlıklarında bir “Device-ID” göndermesini veya uygulamanızda cihaz kimliği oluşturup saklamasını sağlayabilirsiniz. Yukarıdaki middleware örneğine benzer bir şekilde, cihaz ID’sini kullanarak istekleri sayabilir ve limiti kontrol edebilirsiniz. Ancak, cihaz ID’sinin güvenli bir şekilde elde edildiğinden ve saklandığından emin olmalısınız.

Rate Limiting Kütüphaneleri

Rate limiting uygulamasını kolaylaştırmak için çeşitli NestJS kütüphaneleri mevcuttur. Bu kütüphaneler, redis entegrasyonu gibi gelişmiş özellikler sunar ve geliştirme sürenizi kısaltır. Araştırmanızı yaparak projenize en uygun kütüphaneyi seçebilirsiniz.

Sonuç

Bu rehberde, NestJS uygulamalarında IP tabanlı ve cihaz ID tabanlı rate limiting’i nasıl uygulayacağınızı öğrendiniz. Rate limiting, uygulamanızın güvenliğini ve performansını korumak için önemli bir adımdır. Doğru stratejiyi seçerken ve uygularken uygulamanızın spesifik ihtiyaçlarını ve güvenlik gereksinimlerini göz önünde bulundurmanız önemlidir. Umarım bu rehber faydalı olmuştur! İlginizi çekebilecek İngilizce bir kaynak için buraya bakabilirsiniz.

#Etiketler: NestJS, Rate Limiting, Hız Sınırlama, IP Tabanlı, Cihaz ID Tabanlı, Güvenlik, Performans, Rehber, Tutorial, FatihSoysal


Yorumlar
İçeriği beğendiniz mi? Bir tartışma başlatın veya görüşlerinizi paylaşın.
Yorum Yaz

Bir yanıt yazın

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

E-posta Bülteni
Yazılım Topluluğuna Katılın
En son güncellemeleri, yaratıcı ipuçlarını ve özel kaynakları doğrudan e-posta kutunuza alın. Tasarım ve inovasyonun geleceğini birlikte keşfedelim.