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

155 lines
3.6 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Trip Create Security - Quick Reference
## 🚀 Hızlı Başlangıç
### Frontend'de Kullanım
```typescript
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 | Açı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
### Açı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ı
```bash
# Lint kontrolü
npm run lint
# Type check
npm run type-check
# Build
npm run build
```
---
## 📊 Rate Limiter Utility
```typescript
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
```typescript
// 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
```typescript
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?