155 lines
3.6 KiB
Markdown
155 lines
3.6 KiB
Markdown
# 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?
|