38980-vm/app-9w9pd00g5j41/TRIP_CREATE_SECURITY_QUICK_REF.md
2026-03-04 18:25:09 +00:00

3.6 KiB
Raw Permalink Blame History

Trip Create Security - Quick Reference

🚀 Hızlı Başlangıç

Frontend'de Kullanım

import { tripsApiSafe } from '@/db/api';

// ✅ DOĞRU
const trip = await tripsApiSafe.create({
  title: "İstanbul Gezisi",
  destination: "İstanbul",
  start_date: "2026-03-01",
  end_date: "2026-03-10"
});

// ❌ YANLIŞ
const trip = await tripsApi.create({ ... }); // Güvensiz!

🔒 Güvenlik Özellikleri

Özellik ıklama Hata Mesajı
Auth Mandatory Giriş zorunlu "Seyahat oluşturmak için giriş yapmalısınız."
Rate Limiting 5 trip/saat "Saatlik limit aşıldı. X dakika sonra tekrar deneyin."
Title Validation 3-200 karakter "Seyahat başlığı en az 3 karakter olmalıdır."
Date Validation Geçerli tarih "Bitiş tarihi başlangıç tarihinden önce olamaz."
Location Validation Geçerli koordinat "Enlem değeri -90 ile 90 arasında olmalıdır."

📋 Validation Kuralları

Başlık (title)

  • Min: 3 karakter
  • Max: 200 karakter
  • Zorunlu

ıklama (description)

  • Max: 2000 karakter
  • Opsiyonel

Tarihler (start_date, end_date)

  • Geçerli ISO format (YYYY-MM-DD)
  • end_date >= start_date
  • Max süre: 365 gün

Konum (start_lat, start_lng)

  • Enlem: -90 ile 90 arası
  • Boylam: -180 ile 180 arası

İlgi Alanları (interests)

  • Max: 20 adet
  • Her biri max 50 karakter

🧪 Test Komutları

# Lint kontrolü
npm run lint

# Type check
npm run type-check

# Build
npm run build

📊 Rate Limiter Utility

import { rateLimiter } from '@/utils/rateLimiter';

// Limit kontrolü
rateLimiter.check('trip_create_user123', 5, 3600000);

// Kalan istek sayısı
const remaining = rateLimiter.remaining('trip_create_user123', 5);

// Sıfırlanma zamanı
const resetTime = rateLimiter.resetTime('trip_create_user123');

// Manuel sıfırlama (test için)
rateLimiter.reset('trip_create_user123');

🔍 Security Logs

// Log formatı
[SECURITY AUDIT] 2026-02-08T10:30:00.000Z | Event: TRIP_CREATE_SUCCESS | User: user-uuid | Details: { ... }

// Log olayları
- TRIP_CREATE_FAILED          // Yetkisiz erişim
- TRIP_CREATE_RATE_LIMITED    // Rate limit aşımı
- TRIP_CREATE_VALIDATION_FAILED // Geçersiz input
- TRIP_CREATE_DB_ERROR        // Veritabanı hatası
- TRIP_CREATE_SUCCESS         // Başarılı oluşturma

🐛 Hata Yakalama

try {
  const trip = await tripsApiSafe.create({ ... });
} catch (error: any) {
  // error.message kullanıcıya gösterilebilir
  toast.error(error.message);
  
  // Detaylı log için
  console.error('Trip creation error:', error);
}

📚 Daha Fazla Bilgi

  • Detaylı Test Senaryoları: TRIP_CREATE_SECURITY_TESTS.md
  • Implementasyon Özeti: TRIP_CREATE_SECURITY_SUMMARY.md
  • Rate Limiter Utility: src/utils/rateLimiter.ts
  • API Implementation: src/db/api.ts (satır 1052+)

⚠️ Önemli Notlar

  1. Her zaman tripsApiSafe.create() kullanın
  2. Hata mesajlarını kullanıcıya gösterin (error.message)
  3. Rate limit için Redis kullanımı önerilir (production)
  4. Security logları düzenli kontrol edin
  5. Test senaryolarını çalıştırın

🎯 Checklist

  • tripsApiSafe.create() kullanıldı mı?
  • Hata mesajları kullanıcıya gösteriliyor mu?
  • Auth kontrolü yapılıyor mu?
  • Rate limiting aktif mi?
  • Input validation çalışıyor mu?
  • Security logları görünüyor mu?