1349 lines
59 KiB
Markdown
1349 lines
59 KiB
Markdown
|
|
# Oltalama Test Yönetim Paneli - Proje Tanımı ve Geliştirme Planı
|
|||
|
|
|
|||
|
|
## 📋 Proje Özeti
|
|||
|
|
|
|||
|
|
Güvenlik farkındalık eğitimleri için kullanılacak, **basit ve kullanışlı** bir phishing test yönetim sistemi. Karmaşık kampanya yönetimi yerine, **tek tıkla token oluştur, mail gönder, anlık Telegram bildirimi al** prensipleriyle çalışan, SQLite tabanlı hafif bir çözüm.
|
|||
|
|
|
|||
|
|
## 🎯 Proje Hedefleri
|
|||
|
|
|
|||
|
|
- **Basitlik**: Karmaşık konfigürasyon yok, Gmail + Telegram ile hızlı başla
|
|||
|
|
- **Hızlı Token Oluşturma**: "Yeni Mail Oluştur" butonuyla saniyeler içinde tracking linki hazır
|
|||
|
|
- **Gerçek Zamanlı Bildirim**: Link tıklandığında anında Telegram mesajı al
|
|||
|
|
- **Detaylı Tracking**: IP, konum, cihaz bilgilerini otomatik kaydet
|
|||
|
|
- **Tek Kullanıcı Odaklı**: Kişisel kullanım için optimize edilmiş, basit admin paneli
|
|||
|
|
- **Taşınabilir**: SQLite sayesinde tüm veri tek dosyada, yedekleme ve taşıma çok kolay
|
|||
|
|
|
|||
|
|
## ⚡ Quickstart - Nasıl Çalışır?
|
|||
|
|
|
|||
|
|
### 1️⃣ İlk Kurulum (5 dakika)
|
|||
|
|
```bash
|
|||
|
|
# Backend
|
|||
|
|
cd backend && npm install
|
|||
|
|
npm run db:migrate && npm run db:seed
|
|||
|
|
# Default: username: admin, password: admin123
|
|||
|
|
|
|||
|
|
# Frontend
|
|||
|
|
cd ../frontend && npm install
|
|||
|
|
|
|||
|
|
# Her ikisini de başlat
|
|||
|
|
npm run dev
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 2️⃣ Ayarları Yap (5 dakika)
|
|||
|
|
- Panel'de **Settings** sayfasına git
|
|||
|
|
- **Gmail App Password** ekle (rehber mevcut)
|
|||
|
|
- **Telegram Bot** oluştur ve token ekle (rehber mevcut)
|
|||
|
|
- **Test** butonlarıyla kontrol et
|
|||
|
|
|
|||
|
|
### 3️⃣ İlk Şirketi Oluştur (30 saniye)
|
|||
|
|
- **"Şirketler"** sayfasına git
|
|||
|
|
- **"Yeni Şirket Ekle"** butonuna tıkla
|
|||
|
|
- Form doldur:
|
|||
|
|
- Şirket Adı: `Test Bank`
|
|||
|
|
- Sektör: `Banking`
|
|||
|
|
- Açıklama: (opsiyonel)
|
|||
|
|
- **"Kaydet"** tıkla
|
|||
|
|
- İlk şirketin hazır! 🏢
|
|||
|
|
|
|||
|
|
### 4️⃣ İlk Mail Testini Gönder (30 saniye)
|
|||
|
|
- **"Yeni Mail Oluştur"** butonuna tıkla
|
|||
|
|
- Form doldur:
|
|||
|
|
- **Şirket Seç**: `Test Bank` (dropdown)
|
|||
|
|
- Email: `test@example.com`
|
|||
|
|
- Çalışan Adı: `Ahmet` (opsiyonel)
|
|||
|
|
- Şablon: `Banka Şablonu`
|
|||
|
|
- **"Oluştur + Gönder"** tıkla
|
|||
|
|
- Mail otomatik gönderilir! 📧
|
|||
|
|
|
|||
|
|
### 4️⃣ Tıklamayı İzle
|
|||
|
|
- Hedef kişi maildeki linke tıkladığında
|
|||
|
|
- Anında Telegram'a bildirim gelir 🚨
|
|||
|
|
- Panel'de detayları gör: IP, konum, cihaz
|
|||
|
|
|
|||
|
|
**Bu kadar basit!** 🎉
|
|||
|
|
|
|||
|
|
## 🔑 Ana Özellikler
|
|||
|
|
|
|||
|
|
### 1. Basit Mail/Token Oluşturma
|
|||
|
|
- **"Yeni Token Oluştur"** butonu ile hızlı token oluşturma
|
|||
|
|
- **"Yeni Mail Oluştur"** butonu ile otomatik mail gönderimi
|
|||
|
|
- Hedef kullanıcı mail adresi girişi
|
|||
|
|
- Şirket adı ve çalışan adı (opsiyonel) bilgileri
|
|||
|
|
- Otomatik benzersiz tracking URL oluşturma
|
|||
|
|
- Gmail entegrasyonu (App Password ile)
|
|||
|
|
|
|||
|
|
### 2. Akıllı Mail Şablonu Sistemi
|
|||
|
|
- **Şirket Adı** girişi (örn: "Türk Telekom", "İş Bankası")
|
|||
|
|
- **Çalışan Adı** girişi (opsiyonel)
|
|||
|
|
- Varsa: "Sayın [Çalışan Adı]," ile başlar
|
|||
|
|
- Yoksa: "Sayın," ile başlar
|
|||
|
|
- Otomatik oltalama mail içeriği oluşturma
|
|||
|
|
- Şirket logolu, profesyonel görünümlü HTML mail
|
|||
|
|
- Mail içinde tracking link'i otomatik ekleme
|
|||
|
|
- Şablon kütüphanesi (Banka, E-Devlet, Kurumsal Email, vb.)
|
|||
|
|
|
|||
|
|
### 3. Dinamik Tracking URL Sistemi
|
|||
|
|
- Her hedef için benzersiz token: `https://domain.com/t/{unique-token}`
|
|||
|
|
- Token'a tıklandığında otomatik veri toplama
|
|||
|
|
- Kısa ve profesyonel görünümlü URL'ler
|
|||
|
|
- Landing page'e otomatik yönlendirme
|
|||
|
|
|
|||
|
|
### 4. Detaylı IP ve Aktivite Takibi
|
|||
|
|
- **IP Adresi**: Tıklayan kişinin IP'si
|
|||
|
|
- **Tıklama Zamanı**: Tam tarih ve saat
|
|||
|
|
- **User Agent**: Tarayıcı, işletim sistemi, cihaz bilgisi
|
|||
|
|
- **Coğrafi Konum**: IP bazlı şehir/ülke tespiti (GeoIP)
|
|||
|
|
- **Referrer**: Hangi kaynaktan geldi
|
|||
|
|
- **Tıklama Sayısı**: Aynı token'a kaç kez tıklandı
|
|||
|
|
- Tüm veriler SQLite'da saklanır
|
|||
|
|
|
|||
|
|
### 5. Telegram Gerçek Zamanlı Bildirim
|
|||
|
|
- ✅ Link tıklandığında anında Telegram bildirimi
|
|||
|
|
- Bildirim içeriği:
|
|||
|
|
- "🚨 Yeni Tıklama Algılandı!"
|
|||
|
|
- "Hedef: [email]"
|
|||
|
|
- "IP: [ip_address]"
|
|||
|
|
- "Konum: [city, country]"
|
|||
|
|
- "Cihaz: [browser, os]"
|
|||
|
|
- "Zaman: [timestamp]"
|
|||
|
|
- Telegram Bot API kullanımı
|
|||
|
|
- Tek bir Telegram chat_id'ye bildirim
|
|||
|
|
|
|||
|
|
### 6. Basit Yönetim Paneli
|
|||
|
|
- **Dashboard**: Tüm token'ların listesi
|
|||
|
|
- Her token için:
|
|||
|
|
- Hedef email
|
|||
|
|
- Şirket adı
|
|||
|
|
- Oluşturulma tarihi
|
|||
|
|
- Tıklanma durumu (✅/❌)
|
|||
|
|
- Toplam tıklama sayısı
|
|||
|
|
- **Detay Sayfası**: Token'a tıklayan tüm IP'lerin listesi
|
|||
|
|
- **Mail Şablonları**: Hazır şablonlar
|
|||
|
|
- **Ayarlar**: Gmail ve Telegram konfigürasyonu
|
|||
|
|
|
|||
|
|
### 7. Güvenlik Özellikleri
|
|||
|
|
- Basit login (username/password)
|
|||
|
|
- Session tabanlı authentication
|
|||
|
|
- API rate limiting (spam önleme)
|
|||
|
|
- Güvenli token oluşturma (crypto.randomBytes)
|
|||
|
|
- XSS ve SQL injection koruması
|
|||
|
|
|
|||
|
|
## 🏗️ Teknik Mimari
|
|||
|
|
|
|||
|
|
### Backend Stack
|
|||
|
|
- **Runtime**: Node.js (v18+)
|
|||
|
|
- **Framework**: Express.js
|
|||
|
|
- **Database**: SQLite (tek dosya, kurulum gerektirmez)
|
|||
|
|
- **ORM**: Sequelize (SQLite desteği ile)
|
|||
|
|
- **Authentication**: express-session (basit session)
|
|||
|
|
- **Mail**: Nodemailer + Gmail (App Password)
|
|||
|
|
- **Telegram**: node-telegram-bot-api
|
|||
|
|
- **Token Generator**: crypto (Node.js built-in)
|
|||
|
|
- **Validation**: Joi
|
|||
|
|
- **Logging**: Winston
|
|||
|
|
- **GeoIP**: geoip-lite (ücretsiz)
|
|||
|
|
|
|||
|
|
### Frontend Stack
|
|||
|
|
- **Framework**: React.js (Next.js önerilir)
|
|||
|
|
- **State Management**: Redux Toolkit veya Zustand
|
|||
|
|
- **UI Library**: Material-UI veya Ant Design
|
|||
|
|
- **Charts**: Chart.js veya Recharts
|
|||
|
|
- **HTTP Client**: Axios
|
|||
|
|
- **Form Management**: React Hook Form
|
|||
|
|
|
|||
|
|
### DevOps & Infrastructure
|
|||
|
|
- **Containerization**: Docker (opsiyonel - basit deployment için gerek yok)
|
|||
|
|
- **Process Manager**: PM2
|
|||
|
|
- **Reverse Proxy**: Nginx (opsiyonel)
|
|||
|
|
- **SSL**: Let's Encrypt (Certbot) - production için
|
|||
|
|
- **Monitoring**: PM2 built-in monitoring
|
|||
|
|
- **Logging**: Winston (dosya bazlı)
|
|||
|
|
|
|||
|
|
## 📊 Database Schema (Şirket Yönetimi ile)
|
|||
|
|
|
|||
|
|
### Tabloları
|
|||
|
|
|
|||
|
|
#### 1. **companies** - Şirket Yönetimi
|
|||
|
|
```sql
|
|||
|
|
id: INTEGER PRIMARY KEY AUTOINCREMENT
|
|||
|
|
name: VARCHAR(255) NOT NULL -- Şirket adı (örn: "Türk Telekom")
|
|||
|
|
description: TEXT NULL -- Açıklama
|
|||
|
|
logo_url: TEXT NULL -- Logo URL (opsiyonel)
|
|||
|
|
industry: VARCHAR(100) NULL -- Sektör (Banka, Telecom, E-Devlet, vb.)
|
|||
|
|
active: BOOLEAN DEFAULT 1 -- Aktif mi?
|
|||
|
|
created_at: TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
|||
|
|
updated_at: TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
|||
|
|
|
|||
|
|
-- İstatistikler (hesaplanan - denormalized için)
|
|||
|
|
total_tokens: INTEGER DEFAULT 0 -- Toplam token sayısı
|
|||
|
|
total_clicks: INTEGER DEFAULT 0 -- Toplam tıklama sayısı
|
|||
|
|
click_rate: DECIMAL(5,2) DEFAULT 0 -- Tıklama oranı %
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
#### 2. **tracking_tokens** - Tracking Token'ları
|
|||
|
|
```sql
|
|||
|
|
id: INTEGER PRIMARY KEY AUTOINCREMENT
|
|||
|
|
token: VARCHAR(64) UNIQUE NOT NULL -- Benzersiz tracking token (32 byte hex)
|
|||
|
|
company_id: INTEGER NOT NULL -- FK -> companies.id (Hangi şirket için)
|
|||
|
|
target_email: VARCHAR(255) NOT NULL -- Hedef mail adresi
|
|||
|
|
employee_name: VARCHAR(255) NULL -- Çalışan adı (opsiyonel)
|
|||
|
|
template_type: VARCHAR(50) DEFAULT 'bank' -- Mail şablonu tipi
|
|||
|
|
mail_subject: VARCHAR(500) -- Mail konusu
|
|||
|
|
mail_sent: BOOLEAN DEFAULT 0 -- Mail gönderildi mi?
|
|||
|
|
sent_at: TIMESTAMP NULL -- Mail gönderim zamanı
|
|||
|
|
clicked: BOOLEAN DEFAULT 0 -- Link tıklandı mı?
|
|||
|
|
click_count: INTEGER DEFAULT 0 -- Toplam tıklama sayısı
|
|||
|
|
first_click_at: TIMESTAMP NULL -- İlk tıklama zamanı
|
|||
|
|
last_click_at: TIMESTAMP NULL -- Son tıklama zamanı
|
|||
|
|
created_at: TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
|||
|
|
notes: TEXT NULL -- Notlar
|
|||
|
|
|
|||
|
|
FOREIGN KEY (company_id) REFERENCES companies(id) ON DELETE CASCADE
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
#### 3. **click_logs** - Tıklama Kayıtları
|
|||
|
|
```sql
|
|||
|
|
id: INTEGER PRIMARY KEY AUTOINCREMENT
|
|||
|
|
token_id: INTEGER NOT NULL -- FK -> tracking_tokens.id
|
|||
|
|
ip_address: VARCHAR(45) NOT NULL -- Tıklayan IP adresi
|
|||
|
|
country: VARCHAR(100) -- Ülke
|
|||
|
|
city: VARCHAR(100) -- Şehir
|
|||
|
|
latitude: DECIMAL(10, 8) NULL -- Enlem
|
|||
|
|
longitude: DECIMAL(11, 8) NULL -- Boylam
|
|||
|
|
user_agent: TEXT -- Tam User Agent string
|
|||
|
|
browser: VARCHAR(100) -- Parse edilmiş tarayıcı
|
|||
|
|
os: VARCHAR(100) -- Parse edilmiş işletim sistemi
|
|||
|
|
device: VARCHAR(100) -- Parse edilmiş cihaz tipi
|
|||
|
|
referer: TEXT NULL -- Referrer URL
|
|||
|
|
clicked_at: TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
|||
|
|
telegram_sent: BOOLEAN DEFAULT 0 -- Telegram bildirimi gönderildi mi?
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
#### 4. **mail_templates** - Mail Şablonları
|
|||
|
|
```sql
|
|||
|
|
id: INTEGER PRIMARY KEY AUTOINCREMENT
|
|||
|
|
name: VARCHAR(255) NOT NULL -- Şablon adı
|
|||
|
|
template_type: VARCHAR(50) UNIQUE NOT NULL -- Tip (bank, edevlet, corporate, etc.)
|
|||
|
|
subject_template: VARCHAR(500) -- Konu şablonu
|
|||
|
|
body_html: TEXT NOT NULL -- HTML mail içeriği (template)
|
|||
|
|
description: TEXT -- Şablon açıklaması
|
|||
|
|
preview_image: TEXT NULL -- Preview resim URL (opsiyonel)
|
|||
|
|
created_at: TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
|||
|
|
updated_at: TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
|||
|
|
active: BOOLEAN DEFAULT 1 -- Aktif mi?
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
#### 5. **settings** - Sistem Ayarları
|
|||
|
|
```sql
|
|||
|
|
id: INTEGER PRIMARY KEY AUTOINCREMENT
|
|||
|
|
key: VARCHAR(100) UNIQUE NOT NULL -- Ayar key (gmail_user, telegram_token, etc.)
|
|||
|
|
value: TEXT -- Ayar value (encrypted for sensitive data)
|
|||
|
|
is_encrypted: BOOLEAN DEFAULT 0 -- Encrypt edilmiş mi?
|
|||
|
|
description: TEXT -- Açıklama
|
|||
|
|
updated_at: TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
#### 6. **admin_user** - Admin Kullanıcı (tek kullanıcı)
|
|||
|
|
```sql
|
|||
|
|
id: INTEGER PRIMARY KEY CHECK (id = 1) -- Sadece 1 kayıt
|
|||
|
|
username: VARCHAR(100) UNIQUE NOT NULL
|
|||
|
|
password_hash: VARCHAR(255) NOT NULL -- bcrypt hash
|
|||
|
|
last_login: TIMESTAMP NULL
|
|||
|
|
created_at: TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
|||
|
|
updated_at: TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 🔌 API Endpoints (Şirket Yönetimi ile)
|
|||
|
|
|
|||
|
|
### Authentication
|
|||
|
|
```
|
|||
|
|
POST /api/auth/login - Giriş (username + password)
|
|||
|
|
POST /api/auth/logout - Çıkış
|
|||
|
|
GET /api/auth/check - Session kontrolü
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### Companies (Şirket Yönetimi)
|
|||
|
|
```
|
|||
|
|
GET /api/companies - Tüm şirketleri listele
|
|||
|
|
POST /api/companies - Yeni şirket oluştur
|
|||
|
|
GET /api/companies/:id - Şirket detayları + istatistikler
|
|||
|
|
PUT /api/companies/:id - Şirket güncelle
|
|||
|
|
DELETE /api/companies/:id - Şirket sil (cascade: tokenları da siler)
|
|||
|
|
GET /api/companies/:id/tokens - Şirkete ait tüm tokenlar
|
|||
|
|
GET /api/companies/:id/stats - Şirket istatistikleri detaylı
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### Tracking Tokens
|
|||
|
|
```
|
|||
|
|
GET /api/tokens - Tüm token'ları listele (query: ?company_id=X)
|
|||
|
|
POST /api/tokens/create - Yeni token oluştur (mail göndermeden)
|
|||
|
|
Body: { company_id, target_email, employee_name, template_type }
|
|||
|
|
POST /api/tokens/create-and-send - Yeni token oluştur ve mail gönder
|
|||
|
|
Body: { company_id, target_email, employee_name, template_type }
|
|||
|
|
GET /api/tokens/:id - Token detayları
|
|||
|
|
PUT /api/tokens/:id - Token güncelle (notes)
|
|||
|
|
DELETE /api/tokens/:id - Token sil
|
|||
|
|
POST /api/tokens/:id/send - Mevcut token için mail gönder
|
|||
|
|
GET /api/tokens/:id/clicks - Token'a ait tüm tıklama kayıtları
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### Mail Templates
|
|||
|
|
```
|
|||
|
|
GET /api/templates - Tüm mail şablonları
|
|||
|
|
GET /api/templates/:type - Belirli şablon detayı
|
|||
|
|
POST /api/templates - Yeni şablon oluştur
|
|||
|
|
PUT /api/templates/:id - Şablon güncelle
|
|||
|
|
DELETE /api/templates/:id - Şablon sil
|
|||
|
|
POST /api/templates/preview - Şablon önizleme (render et)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### Settings
|
|||
|
|
```
|
|||
|
|
GET /api/settings - Tüm ayarlar
|
|||
|
|
PUT /api/settings/gmail - Gmail ayarları (email, app password)
|
|||
|
|
PUT /api/settings/telegram - Telegram ayarları (bot token, chat_id)
|
|||
|
|
POST /api/settings/test-gmail - Gmail bağlantı testi
|
|||
|
|
POST /api/settings/test-telegram - Telegram test mesajı gönder
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### Tracking (Public Endpoints - Auth Gerektirmez)
|
|||
|
|
```
|
|||
|
|
GET /t/:token - Token tracking endpoint
|
|||
|
|
- IP, User-Agent, GeoIP kaydet
|
|||
|
|
- Telegram bildirimi gönder
|
|||
|
|
- Landing page'e redirect et
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### Dashboard/Stats
|
|||
|
|
```
|
|||
|
|
GET /api/stats/dashboard - Dashboard özet istatistikleri
|
|||
|
|
- Toplam şirket sayısı
|
|||
|
|
- Toplam token sayısı
|
|||
|
|
- Tıklanma oranı
|
|||
|
|
- Son 24 saat aktivite
|
|||
|
|
- Şirket bazlı özet
|
|||
|
|
GET /api/stats/recent-clicks - Son tıklamalar (real-time için)
|
|||
|
|
GET /api/stats/by-company - Şirket bazlı istatistikler (grafik için)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 🔄 İş Akışı (Basitleştirilmiş Workflow)
|
|||
|
|
|
|||
|
|
### Senaryo 0: Şirket Oluştur (İlk Adım)
|
|||
|
|
1. **Panel'e Giriş**: Admin kullanıcı adı/şifre ile giriş yapar
|
|||
|
|
2. **"Şirketler" Sayfasına Git**
|
|||
|
|
3. **"Yeni Şirket Ekle" Butonu**: Tıkla
|
|||
|
|
4. **Form Doldur**:
|
|||
|
|
- Şirket Adı: `Türk Telekom`
|
|||
|
|
- Açıklama: `Telekomünikasyon şirketi test kampanyası`
|
|||
|
|
- Sektör: `Telecom` (dropdown)
|
|||
|
|
- Logo URL: (opsiyonel)
|
|||
|
|
5. **Şirket Oluşturulur**: Artık bu şirket için tokenlar oluşturabilirsin
|
|||
|
|
|
|||
|
|
### Senaryo 1: Token Oluştur + Manuel Mail
|
|||
|
|
1. **Dashboard'dan "Yeni Token Oluştur" Butonu**: Tıkla
|
|||
|
|
2. **Form Doldur**:
|
|||
|
|
- **Şirket Seç**: `Türk Telekom` (dropdown - önceden oluşturulmuş)
|
|||
|
|
- Hedef Email: `mehmet@example.com`
|
|||
|
|
- Çalışan Adı: `Mehmet Yılmaz` (opsiyonel)
|
|||
|
|
- Şablon Seç: `Banka Şablonu`
|
|||
|
|
3. **Token Oluşturulur**:
|
|||
|
|
- Benzersiz token: `a3f8b2e9c1d4f7e6...` (64 karakter hex)
|
|||
|
|
- URL: `https://yourdomain.com/t/a3f8b2e9c1d4f7e6...`
|
|||
|
|
- Şirkete bağlanır (`company_id = Türk Telekom`)
|
|||
|
|
4. **Manuel Mail Gönderimi**:
|
|||
|
|
- Token ve URL ekranda gösterilir
|
|||
|
|
- Admin isterse kendi Gmail'inden manuel gönderir
|
|||
|
|
|
|||
|
|
### Senaryo 2: Token Oluştur + Otomatik Mail Gönder
|
|||
|
|
1. **"Yeni Mail Oluştur" Butonu**: Tıkla
|
|||
|
|
2. **Form Doldur** (şirket seçimi dahil)
|
|||
|
|
3. **Mail Otomatik Gönderilir**:
|
|||
|
|
- Gmail App Password ile Nodemailer kullanılır
|
|||
|
|
- Mail içeriği şablondan oluşturulur:
|
|||
|
|
```
|
|||
|
|
Konu: Türk Telekom - Acil Güvenlik Bildirimi
|
|||
|
|
|
|||
|
|
Sayın Mehmet Yılmaz,
|
|||
|
|
|
|||
|
|
[Şablon içeriği - tracking linki içerir]
|
|||
|
|
|
|||
|
|
Linke tıklamak için: https://yourdomain.com/t/{token}
|
|||
|
|
```
|
|||
|
|
4. **Token + Mail Durumu Kaydedilir**:
|
|||
|
|
- `mail_sent = 1`
|
|||
|
|
- `sent_at = CURRENT_TIMESTAMP`
|
|||
|
|
- Şirket istatistikleri güncellenir (`total_tokens++`)
|
|||
|
|
|
|||
|
|
### Tracking Mekanizması
|
|||
|
|
|
|||
|
|
#### Link Tıklama İzleme
|
|||
|
|
```
|
|||
|
|
URL: https://yourdomain.com/t/a3f8b2e9c1d4f7e6...
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**Kullanıcı tıklayınca ne olur:**
|
|||
|
|
1. ✅ Backend `/t/:token` endpoint'i çalışır
|
|||
|
|
2. ✅ Token veritabanında aranır
|
|||
|
|
3. ✅ IP adresi, User-Agent, Referer yakalanır
|
|||
|
|
4. ✅ GeoIP ile konum belirlenir (geoip-lite)
|
|||
|
|
5. ✅ `click_logs` tablosuna kayıt atılır:
|
|||
|
|
```sql
|
|||
|
|
INSERT INTO click_logs (
|
|||
|
|
token_id, ip_address, country, city,
|
|||
|
|
user_agent, browser, os, device, clicked_at
|
|||
|
|
) VALUES (...)
|
|||
|
|
```
|
|||
|
|
6. ✅ `tracking_tokens` tablosu güncellenir:
|
|||
|
|
```sql
|
|||
|
|
UPDATE tracking_tokens SET
|
|||
|
|
clicked = 1,
|
|||
|
|
click_count = click_count + 1,
|
|||
|
|
last_click_at = CURRENT_TIMESTAMP,
|
|||
|
|
first_click_at = CASE WHEN first_click_at IS NULL
|
|||
|
|
THEN CURRENT_TIMESTAMP
|
|||
|
|
ELSE first_click_at END
|
|||
|
|
```
|
|||
|
|
7. ✅ **Telegram Bildirimi Gönderilir**:
|
|||
|
|
```
|
|||
|
|
🚨 YENİ TIKLAMA ALGILANDI!
|
|||
|
|
|
|||
|
|
🏢 Şirket: Türk Telekom
|
|||
|
|
📧 Hedef: mehmet@example.com
|
|||
|
|
👤 Çalışan: Mehmet Yılmaz
|
|||
|
|
|
|||
|
|
🌍 IP: 85.34.12.45
|
|||
|
|
📍 Konum: Istanbul, Turkey
|
|||
|
|
💻 Cihaz: Chrome 118.0 (Windows 10)
|
|||
|
|
⏰ Zaman: 10 Kas 2025, 14:30:15
|
|||
|
|
|
|||
|
|
📊 Bu token için toplam tıklama: 1
|
|||
|
|
📈 Şirket toplam tıklama: 15 (42 tokenden)
|
|||
|
|
```
|
|||
|
|
8. ✅ Kullanıcı landing page'e redirect edilir
|
|||
|
|
9. ✅ Landing page: "Bu bir güvenlik farkındalık testiydi!"
|
|||
|
|
|
|||
|
|
### Mail Şablon Sistemi
|
|||
|
|
|
|||
|
|
#### Şablon Değişkenleri (Placeholders)
|
|||
|
|
```html
|
|||
|
|
<!-- Şablon HTML'inde kullanılabilir -->
|
|||
|
|
{{company_name}} → Şirket adı
|
|||
|
|
{{employee_name}} → Çalışan adı
|
|||
|
|
{{tracking_url}} → Tracking linki
|
|||
|
|
{{current_year}} → Yıl
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
#### Örnek Şablon: Banka
|
|||
|
|
```html
|
|||
|
|
<!DOCTYPE html>
|
|||
|
|
<html>
|
|||
|
|
<body>
|
|||
|
|
<h2>{{company_name}} Güvenlik Bildirimi</h2>
|
|||
|
|
|
|||
|
|
{{#if employee_name}}
|
|||
|
|
<p>Sayın {{employee_name}},</p>
|
|||
|
|
{{else}}
|
|||
|
|
<p>Sayın,</p>
|
|||
|
|
{{/if}}
|
|||
|
|
|
|||
|
|
<p>Hesabınızda şüpheli aktivite tespit edildi.
|
|||
|
|
Lütfen acilen kimliğinizi doğrulayın:</p>
|
|||
|
|
|
|||
|
|
<a href="{{tracking_url}}" style="...">
|
|||
|
|
Hesabımı Doğrula
|
|||
|
|
</a>
|
|||
|
|
|
|||
|
|
<p>© {{current_year}} {{company_name}}</p>
|
|||
|
|
</body>
|
|||
|
|
</html>
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### Telegram Gerçek Zamanlı Bildirim
|
|||
|
|
- **node-telegram-bot-api** kullanılır
|
|||
|
|
- Her tıklamada anında bildirim
|
|||
|
|
- Ayarlar'dan yapılandırılır:
|
|||
|
|
- Bot Token: `1234567890:ABC...`
|
|||
|
|
- Chat ID: `123456789` (kendi Telegram ID'n)
|
|||
|
|
|
|||
|
|
## 📈 Geliştirme Planı (Basitleştirilmiş - 6-7 Hafta)
|
|||
|
|
|
|||
|
|
### Faz 1: Temel Backend Altyapı (1 Hafta)
|
|||
|
|
- [ ] Proje klasör yapısı oluşturma
|
|||
|
|
- [ ] Node.js + Express.js setup
|
|||
|
|
- [ ] SQLite database dosyası oluşturma
|
|||
|
|
- [ ] Sequelize ile database models:
|
|||
|
|
- [ ] **Company model** (ŞİRKET YÖNETİMİ)
|
|||
|
|
- [ ] TrackingToken model (company_id FK ile)
|
|||
|
|
- [ ] ClickLog model
|
|||
|
|
- [ ] MailTemplate model
|
|||
|
|
- [ ] Settings model
|
|||
|
|
- [ ] AdminUser model
|
|||
|
|
- [ ] Database migration ve seed dosyaları
|
|||
|
|
- [ ] Örnek şirketler seed'leme (Türk Telekom, İş Bankası, vb.)
|
|||
|
|
- [ ] Environment variables (.env)
|
|||
|
|
- [ ] Logger implementasyonu (Winston)
|
|||
|
|
- [ ] Error handling middleware
|
|||
|
|
- [ ] Basic API routing structure
|
|||
|
|
|
|||
|
|
### Faz 2: Authentication & Session (2-3 Gün)
|
|||
|
|
- [ ] express-session yapılandırması
|
|||
|
|
- [ ] Login endpoint (`POST /api/auth/login`)
|
|||
|
|
- [ ] Logout endpoint (`POST /api/auth/logout`)
|
|||
|
|
- [ ] Session check middleware
|
|||
|
|
- [ ] bcrypt ile password hashing
|
|||
|
|
- [ ] İlk admin kullanıcısı seed'leme
|
|||
|
|
|
|||
|
|
### Faz 3: Şirket Yönetimi (3-4 Gün) **YENİ**
|
|||
|
|
- [ ] Company CRUD endpoints:
|
|||
|
|
- [ ] `GET /api/companies` - Tüm şirketleri listele
|
|||
|
|
- [ ] `POST /api/companies` - Yeni şirket oluştur
|
|||
|
|
- [ ] `GET /api/companies/:id` - Şirket detay + istatistikler
|
|||
|
|
- [ ] `PUT /api/companies/:id` - Şirket güncelle
|
|||
|
|
- [ ] `DELETE /api/companies/:id` - Şirket sil (cascade)
|
|||
|
|
- [ ] `GET /api/companies/:id/tokens` - Şirkete ait tokenlar
|
|||
|
|
- [ ] `GET /api/companies/:id/stats` - Şirket istatistikleri
|
|||
|
|
- [ ] Company service layer
|
|||
|
|
- [ ] Validation (Joi schemas)
|
|||
|
|
- [ ] İstatistik hesaplama (total_tokens, total_clicks, click_rate)
|
|||
|
|
|
|||
|
|
### Faz 4: Token Yönetimi (1 Hafta)
|
|||
|
|
- [ ] Token generation (crypto.randomBytes)
|
|||
|
|
- [ ] Token CRUD endpoints:
|
|||
|
|
- [ ] `POST /api/tokens/create` - Token oluştur (company_id dahil)
|
|||
|
|
- [ ] `POST /api/tokens/create-and-send` - Token oluştur + mail gönder
|
|||
|
|
- [ ] `GET /api/tokens` - Tüm tokenları listele (company_id filtresi ile)
|
|||
|
|
- [ ] `GET /api/tokens/:id` - Token detay
|
|||
|
|
- [ ] `PUT /api/tokens/:id` - Token güncelle
|
|||
|
|
- [ ] `DELETE /api/tokens/:id` - Token sil
|
|||
|
|
- [ ] Token service layer
|
|||
|
|
- [ ] Company istatistiklerini güncelleme (token oluşturulunca/silinince)
|
|||
|
|
- [ ] Validation (Joi schemas)
|
|||
|
|
|
|||
|
|
### Faz 5: Mail Sistemi (1 Hafta)
|
|||
|
|
- [ ] Nodemailer + Gmail entegrasyonu
|
|||
|
|
- [ ] Mail template engine (Handlebars)
|
|||
|
|
- [ ] Template placeholders: {{company_name}}, {{employee_name}}, {{tracking_url}}
|
|||
|
|
- [ ] HTML mail templates oluşturma:
|
|||
|
|
- [ ] Banka şablonu
|
|||
|
|
- [ ] E-Devlet şablonu
|
|||
|
|
- [ ] Kurumsal email şablonu
|
|||
|
|
- [ ] Mail gönderme servisi (şirket adını kullanarak)
|
|||
|
|
- [ ] Mail template CRUD endpoints
|
|||
|
|
- [ ] Template preview endpoint
|
|||
|
|
- [ ] Gmail test endpoint
|
|||
|
|
|
|||
|
|
### Faz 6: Tracking & GeoIP (1 Hafta)
|
|||
|
|
- [ ] `/t/:token` tracking endpoint (public)
|
|||
|
|
- [ ] IP adresi yakalama (req.ip, x-forwarded-for)
|
|||
|
|
- [ ] User-Agent parsing (useragent paketi)
|
|||
|
|
- [ ] GeoIP integration (geoip-lite)
|
|||
|
|
- [ ] Click log kaydetme (click_logs tablosu)
|
|||
|
|
- [ ] Token istatistikleri güncelleme
|
|||
|
|
- [ ] **Şirket istatistikleri güncelleme** (total_clicks++)
|
|||
|
|
- [ ] Landing page HTML (static)
|
|||
|
|
- [ ] Redirect logic
|
|||
|
|
|
|||
|
|
### Faz 7: Telegram Bildirimleri (2-3 Gün)
|
|||
|
|
- [ ] node-telegram-bot-api kurulumu
|
|||
|
|
- [ ] Telegram settings endpoints:
|
|||
|
|
- [ ] `PUT /api/settings/telegram`
|
|||
|
|
- [ ] `POST /api/settings/test-telegram`
|
|||
|
|
- [ ] Bildirim formatı oluşturma (şirket adı dahil)
|
|||
|
|
- [ ] Tıklama sonrası Telegram mesajı gönderimi
|
|||
|
|
- [ ] Şirket bazlı toplam istatistikler bildirme
|
|||
|
|
- [ ] Error handling (telegram down ise)
|
|||
|
|
|
|||
|
|
### Faz 8: Settings & Dashboard API (2-3 Gün)
|
|||
|
|
- [ ] Settings CRUD (gmail, telegram ayarları)
|
|||
|
|
- [ ] Encryption (sensitive data için)
|
|||
|
|
- [ ] Dashboard stats endpoint:
|
|||
|
|
- [ ] **Toplam şirket sayısı**
|
|||
|
|
- [ ] Toplam token sayısı
|
|||
|
|
- [ ] Tıklanan/tıklanmayan oranı
|
|||
|
|
- [ ] Son 24 saat aktivite
|
|||
|
|
- [ ] **Şirket bazlı özet tablosu**
|
|||
|
|
- [ ] En çok tıklanan tokenlar
|
|||
|
|
- [ ] Recent clicks endpoint (real-time için)
|
|||
|
|
- [ ] Company-based stats endpoint (grafik için)
|
|||
|
|
|
|||
|
|
### Faz 9: Frontend - React SPA (2 Hafta)
|
|||
|
|
- [ ] React (Vite) veya Next.js project setup
|
|||
|
|
- [ ] UI framework: Material-UI (MUI) veya Tailwind CSS
|
|||
|
|
- [ ] React Router setup
|
|||
|
|
- [ ] Axios API client yapılandırması
|
|||
|
|
|
|||
|
|
#### Sayfalar:
|
|||
|
|
- [ ] **Login Page** (`/login`)
|
|||
|
|
- [ ] Login formu
|
|||
|
|
- [ ] Session yönetimi
|
|||
|
|
|
|||
|
|
- [ ] **Dashboard** (`/`)
|
|||
|
|
- [ ] Özet kartlar (Şirket sayısı, Total tokens, Click rate, etc.)
|
|||
|
|
- [ ] **Şirket bazlı performans tablosu**
|
|||
|
|
- [ ] Son tıklamalar listesi (real-time, şirket adı ile)
|
|||
|
|
- [ ] Şirket bazlı grafik (Chart.js)
|
|||
|
|
|
|||
|
|
- [ ] **Companies** (`/companies`) **YENİ**
|
|||
|
|
- [ ] Şirket kartları listesi
|
|||
|
|
- [ ] "Yeni Şirket Ekle" butonu
|
|||
|
|
- [ ] Her şirkette: İsim, Sektör, Token sayısı, Tıklama oranı
|
|||
|
|
- [ ] Arama ve filtreleme
|
|||
|
|
|
|||
|
|
- [ ] **Company Detay** (`/companies/:id`) **YENİ**
|
|||
|
|
- [ ] Şirket bilgileri (düzenlenebilir)
|
|||
|
|
- [ ] Şirkete özel istatistikler
|
|||
|
|
- [ ] Şirkete özel grafik (30 gün)
|
|||
|
|
- [ ] Şirkete ait tokenların listesi
|
|||
|
|
- [ ] "Yeni Token Ekle" butonu (şirket otomatik seçili)
|
|||
|
|
- [ ] "Şirketi Sil" butonu
|
|||
|
|
|
|||
|
|
- [ ] **Tokens List** (`/tokens`)
|
|||
|
|
- [ ] Tüm tokenları tablo halinde
|
|||
|
|
- [ ] **Şirket bazlı filtreleme (dropdown)**
|
|||
|
|
- [ ] Filtreleme (tıklanan/tıklanmayan)
|
|||
|
|
- [ ] Arama (email, şirket adı, çalışan adı)
|
|||
|
|
- [ ] "Yeni Token Oluştur" butonu
|
|||
|
|
- [ ] "Yeni Mail Oluştur" butonu
|
|||
|
|
|
|||
|
|
- [ ] **Token Detay** (`/tokens/:id`)
|
|||
|
|
- [ ] Token bilgileri
|
|||
|
|
- [ ] **Şirket adı ve "Şirkete Git" linki**
|
|||
|
|
- [ ] Tracking URL (copy to clipboard)
|
|||
|
|
- [ ] Tıklama geçmişi tablosu (IP, konum, cihaz, zaman)
|
|||
|
|
- [ ] Not ekleme
|
|||
|
|
|
|||
|
|
- [ ] **Create Token Modal/Page**
|
|||
|
|
- [ ] Form: **Şirket Seç (dropdown)**, Email, Çalışan Adı, Şablon
|
|||
|
|
- [ ] "Sadece Oluştur" ve "Oluştur + Mail Gönder" butonları
|
|||
|
|
- [ ] Mail önizleme (şirket adı ile)
|
|||
|
|
|
|||
|
|
- [ ] **Templates** (`/templates`)
|
|||
|
|
- [ ] Mail şablonları listesi
|
|||
|
|
- [ ] Yeni şablon oluşturma
|
|||
|
|
- [ ] Şablon düzenleme (HTML editor - basit textarea yeterli)
|
|||
|
|
- [ ] Preview
|
|||
|
|
|
|||
|
|
- [ ] **Settings** (`/settings`)
|
|||
|
|
- [ ] Gmail ayarları (email, app password)
|
|||
|
|
- [ ] Telegram ayarları (bot token, chat_id)
|
|||
|
|
- [ ] Test butonları
|
|||
|
|
- [ ] Domain/Base URL ayarı
|
|||
|
|
|
|||
|
|
- [ ] **Responsive Design** (Mobile uyumlu)
|
|||
|
|
|
|||
|
|
### Faz 10: Güvenlik & Optimizasyon (2-3 Gün)
|
|||
|
|
- [ ] API rate limiting (express-rate-limit)
|
|||
|
|
- [ ] Input validation (Joi - tüm endpoints, şirket endpoints dahil)
|
|||
|
|
- [ ] SQL injection prevention (ORM kullanımı)
|
|||
|
|
- [ ] XSS protection (helmet.js)
|
|||
|
|
- [ ] CORS yapılandırması
|
|||
|
|
- [ ] Secure session cookies
|
|||
|
|
- [ ] Database indexing (token, email, ip_address, company_id)
|
|||
|
|
- [ ] Error logging
|
|||
|
|
|
|||
|
|
### Faz 11: Testing & Deployment (3-4 Gün)
|
|||
|
|
- [ ] Backend unit tests (önemli servisler için)
|
|||
|
|
- [ ] API endpoint tests (Postman collection)
|
|||
|
|
- [ ] Company endpoints testi
|
|||
|
|
- [ ] Token + Company ilişki testi
|
|||
|
|
- [ ] Frontend test (manuel)
|
|||
|
|
- [ ] .env.example dosyaları
|
|||
|
|
- [ ] README.md:
|
|||
|
|
- [ ] Kurulum talimatları
|
|||
|
|
- [ ] Gmail App Password nasıl alınır
|
|||
|
|
- [ ] Telegram Bot nasıl oluşturulur
|
|||
|
|
- [ ] İlk şirket nasıl oluşturulur
|
|||
|
|
- [ ] Deployment guide
|
|||
|
|
- [ ] Production build test
|
|||
|
|
- [ ] PM2 ecosystem.config.js
|
|||
|
|
- [ ] SQLite backup scripti
|
|||
|
|
- [ ] Database migration komutları
|
|||
|
|
|
|||
|
|
## 🎨 UI/UX Tasarım Önerileri
|
|||
|
|
|
|||
|
|
### Dashboard Ana Sayfa
|
|||
|
|
```
|
|||
|
|
┌─────────────────────────────────────────────────────────┐
|
|||
|
|
│ 📊 Dashboard 👤 Admin ▼ │
|
|||
|
|
├─────────────────────────────────────────────────────────┤
|
|||
|
|
│ │
|
|||
|
|
│ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌──────────┐ │
|
|||
|
|
│ │ 🏢 5 │ │ 📨 42 │ │ ✅ 15 │ │ 📈 35.7%│ │
|
|||
|
|
│ │ Şirket │ │ Toplam │ │ Tıklanan│ │ Başarı │ │
|
|||
|
|
│ │ │ │ Token │ │ │ │ Oranı │ │
|
|||
|
|
│ └─────────┘ └─────────┘ └─────────┘ └──────────┘ │
|
|||
|
|
│ │
|
|||
|
|
│ 📊 Şirket Bazlı Performans │
|
|||
|
|
│ ┌────────────────────────────────────────────────┐ │
|
|||
|
|
│ │ Şirket │ Tokenlar │ Tıklanan │ Oran │ │
|
|||
|
|
│ ├────────────────────────────────────────────────┤ │
|
|||
|
|
│ │ Türk Telekom │ 18 │ 8 │ 44.4% │ │
|
|||
|
|
│ │ İş Bankası │ 12 │ 4 │ 33.3% │ │
|
|||
|
|
│ │ PTT │ 7 │ 2 │ 28.6% │ │
|
|||
|
|
│ │ E-Devlet │ 5 │ 1 │ 20.0% │ │
|
|||
|
|
│ └────────────────────────────────────────────────┘ │
|
|||
|
|
│ │
|
|||
|
|
│ 📈 Son 7 Gün Aktivite (Tüm Şirketler) │
|
|||
|
|
│ ┌────────────────────────────────────────┐ │
|
|||
|
|
│ │ [Çizgi grafiği - şirket bazlı] │ │
|
|||
|
|
│ └────────────────────────────────────────┘ │
|
|||
|
|
│ │
|
|||
|
|
│ 🚨 Son Tıklamalar (Gerçek Zamanlı) │
|
|||
|
|
│ ┌──────────────────────────────────────────────────┐ │
|
|||
|
|
│ │ 🏢 Türk Telekom │ │
|
|||
|
|
│ │ 14:35 • mehmet@example.com • 85.34.12.45 │ │
|
|||
|
|
│ │ Istanbul, Turkey • Chrome (Windows) │ │
|
|||
|
|
│ ├──────────────────────────────────────────────────┤ │
|
|||
|
|
│ │ 🏢 İş Bankası │ │
|
|||
|
|
│ │ 13:22 • ayse@company.com • 92.45.67.89 │ │
|
|||
|
|
│ │ Ankara, Turkey • Safari (iPhone) │ │
|
|||
|
|
│ └──────────────────────────────────────────────────┘ │
|
|||
|
|
│ │
|
|||
|
|
│ [🔵 Yeni Token Oluştur] [📧 Yeni Mail Oluştur] │
|
|||
|
|
└─────────────────────────────────────────────────────────┘
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### Şirketler Sayfası
|
|||
|
|
```
|
|||
|
|
┌─────────────────────────────────────────────────────────┐
|
|||
|
|
│ 🏢 Şirketler │
|
|||
|
|
├─────────────────────────────────────────────────────────┤
|
|||
|
|
│ │
|
|||
|
|
│ 🔍 [Arama: şirket adı...] [➕ Yeni Şirket] │
|
|||
|
|
│ │
|
|||
|
|
│ ┌──────────────────────────────────────────────────┐ │
|
|||
|
|
│ │ 📊 TÜRK TELEKOM ✏️ │ │
|
|||
|
|
│ │ Sektör: Telecom │ │
|
|||
|
|
│ │ 📨 18 token • ✅ 8 tıklanan • 📈 44.4% │ │
|
|||
|
|
│ │ Son aktivite: 2 saat önce │ │
|
|||
|
|
│ └──────────────────────────────────────────────────┘ │
|
|||
|
|
│ │
|
|||
|
|
│ ┌──────────────────────────────────────────────────┐ │
|
|||
|
|
│ │ 📊 İŞ BANKASI ✏️ │ │
|
|||
|
|
│ │ Sektör: Banking │ │
|
|||
|
|
│ │ 📨 12 token • ✅ 4 tıklanan • 📈 33.3% │ │
|
|||
|
|
│ │ Son aktivite: 1 gün önce │ │
|
|||
|
|
│ └──────────────────────────────────────────────────┘ │
|
|||
|
|
│ │
|
|||
|
|
│ ┌──────────────────────────────────────────────────┐ │
|
|||
|
|
│ │ 📊 PTT ✏️ │ │
|
|||
|
|
│ │ Sektör: Government │ │
|
|||
|
|
│ │ 📨 7 token • ✅ 2 tıklanan • 📈 28.6% │ │
|
|||
|
|
│ │ Son aktivite: 3 gün önce │ │
|
|||
|
|
│ └──────────────────────────────────────────────────┘ │
|
|||
|
|
│ │
|
|||
|
|
│ [Her şirket kartına tıklayınca detay sayfası açılır] │
|
|||
|
|
└─────────────────────────────────────────────────────────┘
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### Token Listesi Sayfası
|
|||
|
|
```
|
|||
|
|
┌─────────────────────────────────────────────────────────┐
|
|||
|
|
│ 🎯 Tracking Tokenlar │
|
|||
|
|
├─────────────────────────────────────────────────────────┤
|
|||
|
|
│ │
|
|||
|
|
│ 🏢 [Tüm Şirketler ▼] 🔍 [Arama...] [Filtre ▼] [⬇] │
|
|||
|
|
│ │
|
|||
|
|
│ ┌──────────────────────────────────────────────────┐ │
|
|||
|
|
│ │ Email │ Şirket │ Durum │ Tıklama │ 📅│ │
|
|||
|
|
│ ├──────────────────────────────────────────────────┤ │
|
|||
|
|
│ │ mehmet@... │ T.Telekom │ ✅ │ 3× │10K│ │
|
|||
|
|
│ │ ayse@... │ İş Bankası │ ✅ │ 1× │10K│ │
|
|||
|
|
│ │ ali@... │ PTT │ ❌ │ 0× │09K│ │
|
|||
|
|
│ │ zeynep@... │ T.Telekom │ ✅ │ 2× │08K│ │
|
|||
|
|
│ └──────────────────────────────────────────────────┘ │
|
|||
|
|
│ │
|
|||
|
|
│ [< Önceki] Sayfa 1/3 [Sonraki >] │
|
|||
|
|
└─────────────────────────────────────────────────────────┘
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### Token Oluştur Modal
|
|||
|
|
```
|
|||
|
|
┌──────────────────────────────────┐
|
|||
|
|
│ 🎯 Yeni Token Oluştur [X] │
|
|||
|
|
├──────────────────────────────────┤
|
|||
|
|
│ │
|
|||
|
|
│ 🏢 Şirket Seç * │
|
|||
|
|
│ [▼ Türk Telekom ] │
|
|||
|
|
│ │
|
|||
|
|
│ 📧 Hedef Email * │
|
|||
|
|
│ [mehmet@example.com ] │
|
|||
|
|
│ │
|
|||
|
|
│ 👤 Çalışan Adı (opsiyonel) │
|
|||
|
|
│ [Mehmet Yılmaz ] │
|
|||
|
|
│ │
|
|||
|
|
│ 📝 Mail Şablonu * │
|
|||
|
|
│ [▼ Banka Güvenlik Bildirimi ] │
|
|||
|
|
│ │
|
|||
|
|
│ ┌────────────────────────────┐ │
|
|||
|
|
│ │ 👁️ Önizleme │ │
|
|||
|
|
│ │ │ │
|
|||
|
|
│ │ Konu: Türk Telekom - │ │
|
|||
|
|
│ │ Acil Güvenlik... │ │
|
|||
|
|
│ │ │ │
|
|||
|
|
│ │ Sayın Mehmet Yılmaz, │ │
|
|||
|
|
│ │ Hesabınızda şüpheli... │ │
|
|||
|
|
│ └────────────────────────────┘ │
|
|||
|
|
│ │
|
|||
|
|
│ [Sadece Oluştur] [Oluştur+Gönder]│
|
|||
|
|
└──────────────────────────────────┘
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### Token Detay Sayfası
|
|||
|
|
```
|
|||
|
|
┌─────────────────────────────────────────────────────────┐
|
|||
|
|
│ ← Geri Token Detayı │
|
|||
|
|
├─────────────────────────────────────────────────────────┤
|
|||
|
|
│ │
|
|||
|
|
│ 🏢 TÜRK TELEKOM [Şirkete Git →] │
|
|||
|
|
│ 📧 mehmet@example.com │
|
|||
|
|
│ 👤 Mehmet Yılmaz │
|
|||
|
|
│ 📅 Oluşturuldu: 10 Kas 2025, 10:30 │
|
|||
|
|
│ 📨 Mail gönderildi: ✅ Evet (10 Kas 2025, 10:31) │
|
|||
|
|
│ │
|
|||
|
|
│ 🔗 Tracking URL: │
|
|||
|
|
│ ┌──────────────────────────────────────────┐ │
|
|||
|
|
│ │ https://domain.com/t/a3f8b2e9c1d4f7... │ [📋 Kopyala]│
|
|||
|
|
│ └──────────────────────────────────────────┘ │
|
|||
|
|
│ │
|
|||
|
|
│ 📊 İstatistikler │
|
|||
|
|
│ • Toplam Tıklama: 3 │
|
|||
|
|
│ • İlk Tıklama: 10 Kas 2025, 14:35 │
|
|||
|
|
│ • Son Tıklama: 10 Kas 2025, 16:20 │
|
|||
|
|
│ │
|
|||
|
|
│ 🚨 Tıklama Geçmişi │
|
|||
|
|
│ ┌──────────────────────────────────────────────────┐ │
|
|||
|
|
│ │ Zaman │ IP Adresi │ Konum │ Cihaz│ │
|
|||
|
|
│ ├──────────────────────────────────────────────────┤ │
|
|||
|
|
│ │ 16:20:15 │ 85.34.12.45 │ Istanbul, TR │ Chr..│ │
|
|||
|
|
│ │ 15:10:33 │ 85.34.12.45 │ Istanbul, TR │ Chr..│ │
|
|||
|
|
│ │ 14:35:12 │ 85.34.12.45 │ Istanbul, TR │ Chr..│ │
|
|||
|
|
│ └──────────────────────────────────────────────────┘ │
|
|||
|
|
│ │
|
|||
|
|
│ 📝 Notlar: │
|
|||
|
|
│ [Buraya not ekleyebilirsiniz... ] │
|
|||
|
|
│ [💾 Kaydet] │
|
|||
|
|
│ │
|
|||
|
|
│ [🗑️ Token'ı Sil] [📧 Yeniden Mail Gönder] │
|
|||
|
|
└─────────────────────────────────────────────────────────┘
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### Şirket Detay Sayfası
|
|||
|
|
```
|
|||
|
|
┌─────────────────────────────────────────────────────────┐
|
|||
|
|
│ ← Geri Şirket Detayı │
|
|||
|
|
├─────────────────────────────────────────────────────────┤
|
|||
|
|
│ │
|
|||
|
|
│ 🏢 TÜRK TELEKOM [✏️ Düzenle]│
|
|||
|
|
│ 📋 Sektör: Telecom │
|
|||
|
|
│ 📝 Açıklama: Telekomünikasyon şirketi test kampanyası │
|
|||
|
|
│ │
|
|||
|
|
│ 📊 Genel İstatistikler │
|
|||
|
|
│ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌──────────┐ │
|
|||
|
|
│ │ 📨 18 │ │ ✅ 8 │ │ 📈 44.4%│ │ 🕐 2saat │ │
|
|||
|
|
│ │ Token │ │ Tıklanan│ │ Oran │ │ Son │ │
|
|||
|
|
│ └─────────┘ └─────────┘ └─────────┘ └──────────┘ │
|
|||
|
|
│ │
|
|||
|
|
│ 📈 Son 30 Gün Aktivite │
|
|||
|
|
│ ┌────────────────────────────────────────┐ │
|
|||
|
|
│ │ [Şirkete özel çizgi grafiği] │ │
|
|||
|
|
│ └────────────────────────────────────────┘ │
|
|||
|
|
│ │
|
|||
|
|
│ 🎯 Token Listesi [➕ Yeni Token]│
|
|||
|
|
│ ┌──────────────────────────────────────────────────┐ │
|
|||
|
|
│ │ Email │ Çalışan │ Durum │ Tıklama │ │
|
|||
|
|
│ ├──────────────────────────────────────────────────┤ │
|
|||
|
|
│ │ mehmet@ex... │ M. Yılmaz │ ✅ │ 3× │ │
|
|||
|
|
│ │ ayse@exa... │ A. Kaya │ ✅ │ 2× │ │
|
|||
|
|
│ │ ali@exam... │ A. Demir │ ❌ │ 0× │ │
|
|||
|
|
│ └──────────────────────────────────────────────────┘ │
|
|||
|
|
│ │
|
|||
|
|
│ [🗑️ Şirketi Sil] [📊 Rapor İndir] │
|
|||
|
|
└─────────────────────────────────────────────────────────┘
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### Ayarlar Sayfası
|
|||
|
|
```
|
|||
|
|
┌─────────────────────────────────────────────────────────┐
|
|||
|
|
│ ⚙️ Ayarlar │
|
|||
|
|
├─────────────────────────────────────────────────────────┤
|
|||
|
|
│ │
|
|||
|
|
│ 📧 Gmail Ayarları │
|
|||
|
|
│ ┌──────────────────────────────────────────────────┐ │
|
|||
|
|
│ │ Gmail Adresi: │ │
|
|||
|
|
│ │ [myemail@gmail.com ] │ │
|
|||
|
|
│ │ │ │
|
|||
|
|
│ │ App Password: │ │
|
|||
|
|
│ │ [•••••••••••••••• ] │ │
|
|||
|
|
│ │ │ │
|
|||
|
|
│ │ Gönderen Adı: │ │
|
|||
|
|
│ │ [Güvenlik Ekibi ] │ │
|
|||
|
|
│ │ │ │
|
|||
|
|
│ │ [💾 Kaydet] [📧 Test Mail Gönder] │ │
|
|||
|
|
│ └──────────────────────────────────────────────────┘ │
|
|||
|
|
│ │
|
|||
|
|
│ 💬 Telegram Ayarları │
|
|||
|
|
│ ┌──────────────────────────────────────────────────┐ │
|
|||
|
|
│ │ Bot Token: │ │
|
|||
|
|
│ │ [1234567890:ABCdefGHI... ] │ │
|
|||
|
|
│ │ │ │
|
|||
|
|
│ │ Chat ID: │ │
|
|||
|
|
│ │ [123456789 ] │ │
|
|||
|
|
│ │ │ │
|
|||
|
|
│ │ ℹ️ Telegram Bot nasıl oluşturulur? [Rehber] │ │
|
|||
|
|
│ │ │ │
|
|||
|
|
│ │ [💾 Kaydet] [💬 Test Mesajı Gönder] │ │
|
|||
|
|
│ └──────────────────────────────────────────────────┘ │
|
|||
|
|
│ │
|
|||
|
|
│ 🌐 Domain Ayarları │
|
|||
|
|
│ ┌──────────────────────────────────────────────────┐ │
|
|||
|
|
│ │ Base URL: │ │
|
|||
|
|
│ │ [https://domain.com ] │ │
|
|||
|
|
│ │ │ │
|
|||
|
|
│ │ [💾 Kaydet] │ │
|
|||
|
|
│ └──────────────────────────────────────────────────┘ │
|
|||
|
|
└─────────────────────────────────────────────────────────┘
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 🔒 Güvenlik Önlemleri
|
|||
|
|
|
|||
|
|
### Uygulama Güvenliği
|
|||
|
|
- Tüm şifreler bcrypt ile hash'lenecek
|
|||
|
|
- JWT token'lar kısa ömürlü (15-30 dakika), refresh token uzun ömürlü
|
|||
|
|
- Rate limiting: API endpoint'lerine DDoS koruması
|
|||
|
|
- Input validation: Tüm user input'lar validate edilecek
|
|||
|
|
- SQL injection: Parameterized queries (ORM kullanımı)
|
|||
|
|
- XSS: Output encoding, CSP headers
|
|||
|
|
- CSRF protection: Token-based
|
|||
|
|
- HTTPS zorunlu (production)
|
|||
|
|
- Sensitive data encryption (at rest): SMTP passwords
|
|||
|
|
|
|||
|
|
### Etik ve Yasal Gereklilikler
|
|||
|
|
⚠️ **ÖNEMLİ UYARI**: Bu sistem yalnızca yasal ve etik sınırlar içinde kullanılmalıdır:
|
|||
|
|
- Yalnızca izin verilen organizasyonlarda test yapılmalı
|
|||
|
|
- Hedef kullanıcılardan yazılı onay alınmalı (awareness training kapsamında)
|
|||
|
|
- Gerçek phishing saldırısı düzenlenmemeli
|
|||
|
|
- Toplanan veriler KVKK/GDPR uyumlu olmalı
|
|||
|
|
- Audit log'lar düzenli tutulmalı
|
|||
|
|
- Landing page'lerde açık uyarı yapılmalı ("Bu bir güvenlik testi idi")
|
|||
|
|
|
|||
|
|
### Audit ve Logging
|
|||
|
|
- Tüm kritik işlemler loglanmalı (kim, ne, ne zaman)
|
|||
|
|
- Login attempts tracking
|
|||
|
|
- Failed authentication monitoring
|
|||
|
|
- Campaign lifecycle events
|
|||
|
|
- Admin actions logging
|
|||
|
|
- Suspicious activity alerts
|
|||
|
|
|
|||
|
|
## 📦 Bağımlılıklar (package.json)
|
|||
|
|
|
|||
|
|
### Backend Dependencies
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"express": "^4.18.x",
|
|||
|
|
"express-session": "^1.17.x",
|
|||
|
|
"sqlite3": "^5.1.x",
|
|||
|
|
"sequelize": "^6.35.x",
|
|||
|
|
"bcrypt": "^5.1.x",
|
|||
|
|
"nodemailer": "^6.9.x",
|
|||
|
|
"handlebars": "^4.7.x",
|
|||
|
|
"node-telegram-bot-api": "^0.64.x",
|
|||
|
|
"joi": "^17.11.x",
|
|||
|
|
"winston": "^3.11.x",
|
|||
|
|
"dotenv": "^16.3.x",
|
|||
|
|
"express-rate-limit": "^7.1.x",
|
|||
|
|
"helmet": "^7.1.x",
|
|||
|
|
"cors": "^2.8.x",
|
|||
|
|
"geoip-lite": "^1.4.x",
|
|||
|
|
"useragent": "^2.3.x",
|
|||
|
|
"crypto": "built-in"
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### Frontend Dependencies
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"react": "^18.2.x",
|
|||
|
|
"next": "^14.0.x",
|
|||
|
|
"axios": "^1.6.x",
|
|||
|
|
"react-hook-form": "^7.48.x",
|
|||
|
|
"@mui/material": "^5.14.x",
|
|||
|
|
"chart.js": "^4.4.x",
|
|||
|
|
"react-chartjs-2": "^5.2.x",
|
|||
|
|
"zustand": "^4.4.x",
|
|||
|
|
"date-fns": "^2.30.x"
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 📁 Proje Klasör Yapısı
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
oltalama/
|
|||
|
|
├── backend/
|
|||
|
|
│ ├── src/
|
|||
|
|
│ │ ├── config/
|
|||
|
|
│ │ │ ├── database.js # SQLite Sequelize config
|
|||
|
|
│ │ │ ├── session.js # Express-session config
|
|||
|
|
│ │ │ └── logger.js # Winston config
|
|||
|
|
│ │ │
|
|||
|
|
│ │ ├── models/ # Sequelize models
|
|||
|
|
│ │ │ ├── index.js
|
|||
|
|
│ │ │ ├── TrackingToken.js
|
|||
|
|
│ │ │ ├── ClickLog.js
|
|||
|
|
│ │ │ ├── MailTemplate.js
|
|||
|
|
│ │ │ ├── Settings.js
|
|||
|
|
│ │ │ └── AdminUser.js
|
|||
|
|
│ │ │
|
|||
|
|
│ │ ├── controllers/ # Route handlers
|
|||
|
|
│ │ │ ├── auth.controller.js
|
|||
|
|
│ │ │ ├── company.controller.js # ŞİRKET YÖNETİMİ
|
|||
|
|
│ │ │ ├── token.controller.js
|
|||
|
|
│ │ │ ├── template.controller.js
|
|||
|
|
│ │ │ ├── settings.controller.js
|
|||
|
|
│ │ │ ├── tracking.controller.js # Public /t/:token
|
|||
|
|
│ │ │ └── stats.controller.js
|
|||
|
|
│ │ │
|
|||
|
|
│ │ ├── services/ # Business logic
|
|||
|
|
│ │ │ ├── company.service.js # ŞİRKET SERVİSİ
|
|||
|
|
│ │ │ ├── token.service.js
|
|||
|
|
│ │ │ ├── mail.service.js
|
|||
|
|
│ │ │ ├── telegram.service.js
|
|||
|
|
│ │ │ ├── template.service.js
|
|||
|
|
│ │ │ └── tracking.service.js
|
|||
|
|
│ │ │
|
|||
|
|
│ │ ├── middlewares/
|
|||
|
|
│ │ │ ├── auth.middleware.js # Session check
|
|||
|
|
│ │ │ ├── errorHandler.js
|
|||
|
|
│ │ │ └── rateLimiter.js
|
|||
|
|
│ │ │
|
|||
|
|
│ │ ├── routes/
|
|||
|
|
│ │ │ ├── auth.routes.js
|
|||
|
|
│ │ │ ├── company.routes.js # ŞİRKET ROUTE'LARI
|
|||
|
|
│ │ │ ├── token.routes.js
|
|||
|
|
│ │ │ ├── template.routes.js
|
|||
|
|
│ │ │ ├── settings.routes.js
|
|||
|
|
│ │ │ ├── tracking.routes.js # Public routes
|
|||
|
|
│ │ │ └── stats.routes.js
|
|||
|
|
│ │ │
|
|||
|
|
│ │ ├── validators/ # Joi validation schemas
|
|||
|
|
│ │ │ ├── company.validator.js # ŞİRKET VALİDATOR
|
|||
|
|
│ │ │ ├── token.validator.js
|
|||
|
|
│ │ │ ├── template.validator.js
|
|||
|
|
│ │ │ └── settings.validator.js
|
|||
|
|
│ │ │
|
|||
|
|
│ │ ├── utils/
|
|||
|
|
│ │ │ ├── tokenGenerator.js # crypto.randomBytes
|
|||
|
|
│ │ │ ├── geoip.js # geoip-lite wrapper
|
|||
|
|
│ │ │ ├── userAgentParser.js # useragent wrapper
|
|||
|
|
│ │ │ ├── encryption.js # Sensitive data encrypt/decrypt
|
|||
|
|
│ │ │ └── logger.js # Winston logger
|
|||
|
|
│ │ │
|
|||
|
|
│ │ ├── templates/ # Handlebars mail templates
|
|||
|
|
│ │ │ ├── layouts/
|
|||
|
|
│ │ │ │ └── base.hbs
|
|||
|
|
│ │ │ └── emails/
|
|||
|
|
│ │ │ ├── bank.hbs
|
|||
|
|
│ │ │ ├── edevlet.hbs
|
|||
|
|
│ │ │ └── corporate.hbs
|
|||
|
|
│ │ │
|
|||
|
|
│ │ ├── public/ # Landing page HTML
|
|||
|
|
│ │ │ └── landing.html
|
|||
|
|
│ │ │
|
|||
|
|
│ │ └── app.js # Express app entry point
|
|||
|
|
│ │
|
|||
|
|
│ ├── database/
|
|||
|
|
│ │ └── oltalama.db # SQLite database file
|
|||
|
|
│ │
|
|||
|
|
│ ├── migrations/ # Sequelize migrations
|
|||
|
|
│ │ ├── 001-create-tables.js
|
|||
|
|
│ │ └── 002-seed-templates.js
|
|||
|
|
│ │
|
|||
|
|
│ ├── logs/ # Winston logs
|
|||
|
|
│ │ ├── error.log
|
|||
|
|
│ │ └── combined.log
|
|||
|
|
│ │
|
|||
|
|
│ ├── .env.example
|
|||
|
|
│ ├── .gitignore
|
|||
|
|
│ ├── package.json
|
|||
|
|
│ └── README.md
|
|||
|
|
│
|
|||
|
|
├── frontend/
|
|||
|
|
│ ├── src/
|
|||
|
|
│ │ ├── components/
|
|||
|
|
│ │ │ ├── Layout/
|
|||
|
|
│ │ │ │ ├── Sidebar.jsx
|
|||
|
|
│ │ │ │ ├── Header.jsx
|
|||
|
|
│ │ │ │ └── Layout.jsx
|
|||
|
|
│ │ │ ├── Dashboard/
|
|||
|
|
│ │ │ │ ├── StatCard.jsx
|
|||
|
|
│ │ │ │ ├── ActivityFeed.jsx
|
|||
|
|
│ │ │ │ ├── CompanyPerformanceTable.jsx # ŞİRKET PERFORMANS
|
|||
|
|
│ │ │ │ └── ChartWidget.jsx
|
|||
|
|
│ │ │ ├── Companies/ # ŞİRKET BİLEŞENLERİ
|
|||
|
|
│ │ │ │ ├── CompanyList.jsx
|
|||
|
|
│ │ │ │ ├── CompanyCard.jsx
|
|||
|
|
│ │ │ │ ├── CompanyDetail.jsx
|
|||
|
|
│ │ │ │ ├── CreateCompanyModal.jsx
|
|||
|
|
│ │ │ │ └── CompanyStats.jsx
|
|||
|
|
│ │ │ ├── Tokens/
|
|||
|
|
│ │ │ │ ├── TokenList.jsx
|
|||
|
|
│ │ │ │ ├── TokenDetail.jsx
|
|||
|
|
│ │ │ │ ├── CreateTokenModal.jsx # Şirket seçimi ile
|
|||
|
|
│ │ │ │ └── ClickHistoryTable.jsx
|
|||
|
|
│ │ │ └── Common/
|
|||
|
|
│ │ │ ├── Button.jsx
|
|||
|
|
│ │ │ ├── Input.jsx
|
|||
|
|
│ │ │ └── CompanySelector.jsx # Şirket dropdown
|
|||
|
|
│ │ │
|
|||
|
|
│ │ ├── pages/
|
|||
|
|
│ │ │ ├── Login.jsx
|
|||
|
|
│ │ │ ├── Dashboard.jsx
|
|||
|
|
│ │ │ ├── Companies.jsx # ŞİRKETLER SAYFASI
|
|||
|
|
│ │ │ ├── CompanyDetail.jsx # ŞİRKET DETAY
|
|||
|
|
│ │ │ ├── Tokens.jsx
|
|||
|
|
│ │ │ ├── TokenDetail.jsx
|
|||
|
|
│ │ │ ├── Templates.jsx
|
|||
|
|
│ │ │ └── Settings.jsx
|
|||
|
|
│ │ │
|
|||
|
|
│ │ ├── services/
|
|||
|
|
│ │ │ ├── api.js # Axios instance
|
|||
|
|
│ │ │ ├── authService.js
|
|||
|
|
│ │ │ ├── companyService.js # ŞİRKET SERVİSİ
|
|||
|
|
│ │ │ ├── tokenService.js
|
|||
|
|
│ │ │ ├── templateService.js
|
|||
|
|
│ │ │ └── settingsService.js
|
|||
|
|
│ │ │
|
|||
|
|
│ │ ├── context/
|
|||
|
|
│ │ │ └── AuthContext.jsx # Auth state
|
|||
|
|
│ │ │
|
|||
|
|
│ │ ├── utils/
|
|||
|
|
│ │ │ ├── dateFormatter.js
|
|||
|
|
│ │ │ └── copyToClipboard.js
|
|||
|
|
│ │ │
|
|||
|
|
│ │ ├── App.jsx
|
|||
|
|
│ │ └── main.jsx
|
|||
|
|
│ │
|
|||
|
|
│ ├── public/
|
|||
|
|
│ ├── .env.example
|
|||
|
|
│ ├── package.json
|
|||
|
|
│ ├── vite.config.js
|
|||
|
|
│ └── README.md
|
|||
|
|
│
|
|||
|
|
├── docs/
|
|||
|
|
│ ├── SETUP.md # Kurulum rehberi
|
|||
|
|
│ ├── TELEGRAM.md # Telegram bot setup
|
|||
|
|
│ ├── GMAIL.md # Gmail app password setup
|
|||
|
|
│ └── API.md # API documentation
|
|||
|
|
│
|
|||
|
|
├── scripts/
|
|||
|
|
│ └── backup-db.sh # SQLite backup script
|
|||
|
|
│
|
|||
|
|
├── .gitignore
|
|||
|
|
├── README.md # Ana README
|
|||
|
|
└── devpan.md # Bu dosya - Proje tanımı
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 🚀 Kurulum ve Çalıştırma
|
|||
|
|
|
|||
|
|
### Development
|
|||
|
|
```bash
|
|||
|
|
# Repository clone veya yeni proje oluştur
|
|||
|
|
cd oltalama
|
|||
|
|
|
|||
|
|
# Backend setup
|
|||
|
|
cd backend
|
|||
|
|
npm install
|
|||
|
|
cp .env.example .env
|
|||
|
|
# .env dosyasını düzenle (PORT, JWT_SECRET, SMTP ayarları)
|
|||
|
|
|
|||
|
|
# SQLite database oluştur ve migrate et
|
|||
|
|
npm run db:migrate
|
|||
|
|
npm run db:seed
|
|||
|
|
|
|||
|
|
# Backend'i başlat
|
|||
|
|
npm run dev # http://localhost:3000
|
|||
|
|
|
|||
|
|
# Frontend setup (yeni terminal)
|
|||
|
|
cd ../frontend
|
|||
|
|
npm install
|
|||
|
|
cp .env.example .env
|
|||
|
|
# API URL'sini ayarla (REACT_APP_API_URL=http://localhost:3000)
|
|||
|
|
|
|||
|
|
# Frontend'i başlat
|
|||
|
|
npm run dev # http://localhost:3001
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### Production Deployment
|
|||
|
|
```bash
|
|||
|
|
# PM2 ile production'da çalıştırma
|
|||
|
|
cd backend
|
|||
|
|
npm install --production
|
|||
|
|
npm run db:migrate
|
|||
|
|
|
|||
|
|
# PM2 ile başlat
|
|||
|
|
pm2 start src/app.js --name "oltalama-backend"
|
|||
|
|
pm2 save
|
|||
|
|
pm2 startup
|
|||
|
|
|
|||
|
|
# Frontend build
|
|||
|
|
cd ../frontend
|
|||
|
|
npm install
|
|||
|
|
npm run build
|
|||
|
|
|
|||
|
|
# Static dosyaları serve et (nginx veya serve paketi ile)
|
|||
|
|
npx serve -s build -p 3001
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 📊 Tahmini Süre ve Kaynak
|
|||
|
|
|
|||
|
|
- **Toplam Geliştirme Süresi**: 6-7 hafta (1.5-2 ay)
|
|||
|
|
- **Developer Sayısı**: 1 full-stack developer yeterli
|
|||
|
|
- **Teknoloji Seviyesi**: Intermediate Node.js, React bilgisi gerekli
|
|||
|
|
- **Önerilen Çalışma Temposu**: Günde 4-6 saat odaklanmış çalışma
|
|||
|
|
|
|||
|
|
## 💾 SQLite Kullanmanın Avantajları
|
|||
|
|
|
|||
|
|
### Neden SQLite?
|
|||
|
|
- ✅ **Sıfır Kurulum**: Ayrı database sunucusu gerektirmez
|
|||
|
|
- ✅ **Tek Dosya**: Tüm veri `oltalama.db` dosyasında - kolayca yedeklenir
|
|||
|
|
- ✅ **Taşınabilir**: Database dosyasını kopyala-yapıştır ile taşıyabilirsin
|
|||
|
|
- ✅ **Hafif**: Düşük kaynak tüketimi, VPS'lerde mükemmel çalışır
|
|||
|
|
- ✅ **Hızlı**: Küçük-orta ölçekli projeler için PostgreSQL kadar hızlı
|
|||
|
|
- ✅ **Güvenilir**: Milyarlarca cihazda kullanılıyor (Android, iOS, her browser)
|
|||
|
|
- ✅ **ACID Uyumlu**: Transaction desteği, veri güvenliği
|
|||
|
|
- ✅ **Backup Kolay**: Tek dosya yedekleme - `cp oltalama.db oltalama.backup.db`
|
|||
|
|
|
|||
|
|
### Ne Zaman PostgreSQL'e Geçilmeli?
|
|||
|
|
SQLite şu durumlarda yeterli:
|
|||
|
|
- Günde 1000'den az mail gönderiyorsan
|
|||
|
|
- Eşzamanlı 50'den az kullanıcı varsa
|
|||
|
|
- Database 10GB'dan küçükse
|
|||
|
|
|
|||
|
|
PostgreSQL'e geç eğer:
|
|||
|
|
- Çok yüksek concurrency gerekiyorsa (100+ eşzamanlı yazma)
|
|||
|
|
- Multi-server deployment yapacaksan
|
|||
|
|
- Çok büyük veri setleri varsa (10GB+)
|
|||
|
|
- Replication/clustering gerekiyorsa
|
|||
|
|
|
|||
|
|
## 📱 Telegram Bot Kurulum Rehberi
|
|||
|
|
|
|||
|
|
### Adım 1: Bot Oluştur
|
|||
|
|
1. Telegram'da **@BotFather**'ı ara
|
|||
|
|
2. `/newbot` komutunu gönder
|
|||
|
|
3. Bot'un adını gir (örn: "Oltalama Test Bot")
|
|||
|
|
4. Bot'un username'ini gir (örn: "oltalama_test_bot")
|
|||
|
|
5. BotFather sana bir **token** verecek:
|
|||
|
|
```
|
|||
|
|
1234567890:ABCdefGHIjklMNOpqrSTUvwxYZ123456789
|
|||
|
|
```
|
|||
|
|
6. Bu token'ı kopyala, ayarlara yapıştıracaksın
|
|||
|
|
|
|||
|
|
### Adım 2: Chat ID'ni Öğren
|
|||
|
|
1. Bot'unu aç ve `/start` gönder
|
|||
|
|
2. Tarayıcıda şu URL'yi aç:
|
|||
|
|
```
|
|||
|
|
https://api.telegram.org/bot<TOKEN>/getUpdates
|
|||
|
|
```
|
|||
|
|
(`<TOKEN>` yerine kendi token'ını koy)
|
|||
|
|
3. Dönen JSON'da `"chat":{"id":123456789}` şeklinde bir değer göreceksin
|
|||
|
|
4. Bu sayıyı (123456789) kopyala, bu senin **Chat ID**'n
|
|||
|
|
|
|||
|
|
### Adım 3: Sisteme Ekle
|
|||
|
|
- Panel'de **Ayarlar > Telegram** kısmına git
|
|||
|
|
- Bot Token'ı yapıştır
|
|||
|
|
- Chat ID'yi yapıştır
|
|||
|
|
- **Test Mesajı Gönder** butonuna tıkla
|
|||
|
|
- Telegram'da mesaj aldıysan hazırsın! 🎉
|
|||
|
|
|
|||
|
|
## 📧 Gmail App Password Kurulum Rehberi
|
|||
|
|
|
|||
|
|
### Neden App Password?
|
|||
|
|
Gmail normal şifreni kullanmana izin vermiyor (2FA olsa bile). "App Password" özel bir şifre oluşturman gerekiyor.
|
|||
|
|
|
|||
|
|
### Adım 1: 2-Factor Authentication Aç
|
|||
|
|
1. [Google Account](https://myaccount.google.com/) sayfasına git
|
|||
|
|
2. **Security** kısmına tıkla
|
|||
|
|
3. **2-Step Verification**'ı aktifleştir (eğer aktif değilse)
|
|||
|
|
|
|||
|
|
### Adım 2: App Password Oluştur
|
|||
|
|
1. [App Passwords](https://myaccount.google.com/apppasswords) sayfasına git
|
|||
|
|
2. "Select app" dropdown'ından **"Other (Custom name)"** seç
|
|||
|
|
3. İsim gir: "Oltalama Test System"
|
|||
|
|
4. **Generate** butonuna tıkla
|
|||
|
|
5. Google sana 16 haneli bir şifre gösterecek:
|
|||
|
|
```
|
|||
|
|
abcd efgh ijkl mnop
|
|||
|
|
```
|
|||
|
|
6. Bu şifreyi kopyala (boşlukları silebilirsin)
|
|||
|
|
|
|||
|
|
### Adım 3: Sisteme Ekle
|
|||
|
|
- Panel'de **Ayarlar > Gmail** kısmına git
|
|||
|
|
- Gmail adresini gir: `myemail@gmail.com`
|
|||
|
|
- App Password'u yapıştır: `abcdefghijklmnop`
|
|||
|
|
- Gönderen Adı: `Güvenlik Ekibi` (mail'de görünecek)
|
|||
|
|
- **Test Mail Gönder** butonuna tıkla
|
|||
|
|
- Kendi mail adresine test maili gelirse hazırsın! 🎉
|
|||
|
|
|
|||
|
|
## 🎯 Gelecek Geliştirmeler (Roadmap v2.0)
|
|||
|
|
|
|||
|
|
- [ ] Toplu token oluşturma (CSV upload)
|
|||
|
|
- [ ] Mail şablonu editörü (WYSIWYG)
|
|||
|
|
- [ ] Custom landing page'ler (her token için farklı)
|
|||
|
|
- [ ] WhatsApp Business API entegrasyonu
|
|||
|
|
- [ ] SMS phishing desteği
|
|||
|
|
- [ ] QR code phishing
|
|||
|
|
- [ ] Multi-user support (ekip üyeleri)
|
|||
|
|
- [ ] Webhook integrations
|
|||
|
|
- [ ] Advanced reporting (PDF export)
|
|||
|
|
- [ ] API documentation (diğer sistemlerle entegre)
|
|||
|
|
- [ ] Mobile app (React Native)
|
|||
|
|
|
|||
|
|
## 📞 Destek ve İletişim
|
|||
|
|
|
|||
|
|
Projeyle ilgili sorular için:
|
|||
|
|
- GitHub Issues
|
|||
|
|
- Email: [email adresi]
|
|||
|
|
- Documentation: `/docs`
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
**⚠️ ÖNEMLİ UYARI**: Bu sistem yalnızca etik ve yasal phishing testleri için tasarlanmıştır. Kötü niyetli kullanım kesinlikle yasaktır ve yasal sonuçlar doğurur.
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 📋 Proje Bilgileri
|
|||
|
|
|
|||
|
|
**Versiyon**: 1.0.0 (Basitleştirilmiş)
|
|||
|
|
**Son Güncelleme**: 10 Kasım 2025
|
|||
|
|
**Durum**: Planning Phase - Ready to Develop
|
|||
|
|
**Tahmini Tamamlanma**: 6-7 hafta
|
|||
|
|
|
|||
|
|
### Temel Özellikler Özeti
|
|||
|
|
✅ **Şirket bazlı yönetim** (Her şirket ayrı takip)
|
|||
|
|
✅ SQLite (tek dosya database)
|
|||
|
|
✅ Gmail entegrasyonu (Nodemailer)
|
|||
|
|
✅ Telegram gerçek zamanlı bildirimler (şirket bilgisi ile)
|
|||
|
|
✅ Otomatik IP tracking + GeoIP
|
|||
|
|
✅ Mail şablon sistemi (Handlebars)
|
|||
|
|
✅ Basit admin paneli (React)
|
|||
|
|
✅ Session-based authentication
|
|||
|
|
✅ Responsive design
|
|||
|
|
✅ Şirket bazlı istatistik ve raporlama
|
|||
|
|
|
|||
|
|
### Teknoloji Stack
|
|||
|
|
**Backend**: Node.js + Express + SQLite + Sequelize
|
|||
|
|
**Frontend**: React (Vite) + Material-UI
|
|||
|
|
**Entegrasyonlar**: Gmail (SMTP), Telegram Bot API, GeoIP-Lite
|
|||
|
|
|
|||
|
|
### Geliştirme Adımları
|
|||
|
|
1. ✅ Proje planı hazırlandı (Şirket yönetimi dahil)
|
|||
|
|
2. ⏳ Backend altyapı + Company model (1 hafta)
|
|||
|
|
3. ⏳ Authentication + Şirket yönetimi (3-4 gün)
|
|||
|
|
4. ⏳ Token sistemi (company_id ile) (1 hafta)
|
|||
|
|
5. ⏳ Mail & Tracking & Telegram (2 hafta)
|
|||
|
|
6. ⏳ Frontend (Şirket sayfaları dahil) (2 hafta)
|
|||
|
|
7. ⏳ Test & Deploy (3-4 gün)
|
|||
|
|
|
|||
|
|
**Toplam**: ~7-8 hafta geliştirme (şirket yönetimi eklendi)
|
|||
|
|
|