Alışveriş Sepeti

Sepetiniz boş

Güvenlik & Altyapı · 16 dk

E-Ticarette Siber Güvenlik ve Defansif Kodlama: OWASP Top 10 Savunma Rehberi

IDOR ile başkasının siparişini görmeyi, XSS ile kredi kartı çalınmasını ve Brute-Force ile kupon türetilmesini engelleyen Stilmerce kurumsal güvenlik mimarisi.

Yazar: Stilgen Security Team

E-Ticarette Siber Güvenlik ve Defansif Kodlama: OWASP Top 10 Savunma Rehberi

1. E-Ticarette En Sık Sömürülen Açık: IDOR (Insecure Direct Object Reference)

IDOR, yazılımcının istemciden gelen nesne ID'sine körü körüne güvenmesi sonucu ortaya çıkar:

// TEHLİKELİ KOD: Saldırgan URL'deki ID'yi değiştirerek başkasının faturasını indirir!
@Get('orders/:id/invoice')
async getInvoice(@Param('id') orderId: string) {
  return this.ordersService.getInvoicePdf(orderId); // Sahiplik kontrolü YOK!
}

Bir saldırgan basit bir döngü yazarak /orders/1/invoice, /orders/2/invoice şeklinde tüm müşterilerin T.C. kimlik numaralarını, ev adreslerini ve sipariş detaylarını sızdırabilir.

Stilmerce Defansif Yaklaşımı

Herhangi bir veri çekilirken nesne ID'si tek başına asla yeterli kabul edilmez. Veritabanı sorgusu doğrudan oturum açmış kullanıcının kimliği (Owner ID) ile zorunlu olarak filtrelenir: WHERE id = :orderId AND user_id = :currentUserId.

2. Dağıtık Sliding-Window Rate Limiting (Kupon ve Giriş Brute-Force Kalkanı)

Saldırganlar saniyede binlerce istek atarak indirim kuponlarını tahmin etmeye (Coupon Enumeration) veya çalınmış şifre listeleriyle kullanıcı hesaplarına girmeye (Credential Stuffing) çalışır.

Stilmerce, Redis Sliding-Window Log algoritması ile IP ve kullanıcı bazlı akıllı sınırlama uygular:

// rate-limiter.guard.ts
async checkRateLimit(key: string, limit: number, windowSeconds: number): Promise<boolean> {
  const now = Date.now();
  const clearBefore = now - windowSeconds * 1000;

  const multi = this.redis.multi();
  // 1. Süresi dolmuş eski istekleri temizle
  multi.zremrangebyscore(key, 0, clearBefore);
  // 2. Yeni isteği ekle
  multi.zadd(key, now, `${now}-${Math.random()}`);
  // 3. Mevcut penceredeki toplam istek sayısını say
  multi.zcard(key);
  // 4. TTL süresini uzat
  multi.expire(key, windowSeconds);

  const results = await multi.exec();
  const totalRequests = results[2][1] as number;

  return totalRequests <= limit;
}

Sabit pencereli (Fixed Window) sistemlerdeki sınır aşımı açıkları sliding-window algoritmasıyla tamamen engellenir.

3. Katı Güvenlik Başlıkları (Helmet & CSP)

Stilmerce'in her HTTP yanıtına otomatik olarak eklediği savunma başlıkları:

  • Content-Security-Policy (CSP): Sitede yalnızca güvenli hash'e sahip scriptlerin çalışmasını zorunlu kılar; XSS saldırılarını felç eder.
  • Strict-Transport-Security (HSTS): Tarayıcıyı 2 yıl boyunca yalnızca HTTPS kullanmaya zorlar.
  • X-Frame-Options: DENY: Sitenin görünmez bir iframe içinde açılarak tıklama tuzakçılığı (Clickjacking) yapılmasını imkansız kılar.