✅ Muzibu Player - Güncel Durum (v3)

📅 Güncelleme: 2025-11-29 04:30 | 🎯 Tenant: muzibu.com (ID: 1001) | 🔥 SON EKLENEN: Signed URLs + HLS AES-128 Encryption

✅ Tamamlanan

21

Rate Limiting + Security + Signed URLs + Encryption

❌ Kalan

3

Redis Cache + Keyboard Shortcuts + Lyrics

88% Tamamlanma (21/24 özellik)

🆕 YENİ EKLENEN ÖZELLİKLER (v3)

🔐 3. SIGNED URLs (URL İmzalama)

SignedUrlService
HMAC-SHA256 ile kriptografik URL imzalama. Stream URL'leri 30 dakika, HLS URL'leri 60 dakika geçerli.
💡 Nasıl Çalışıyor:
1️⃣ Kullanıcı stream ister
2️⃣ Server imzalı URL üretir (expires + signature parametreleri)
3️⃣ URL 30 dakika geçerli, sonra otomatik iptal
4️⃣ İmza geçersizse/süresi dolmuşsa dosya servis edilmez
# Örnek Signed URL:
https://muzibu.com/api/muzibu/songs/3/serve?
expires=1764383048&
signature=01e5e5d15799b5f702a8aabf109eef4354b491c4fdff49c7ab7b4e65499e40dc
SongStreamController Integration
Tüm stream endpoint'leri otomatik signed URL döndürüyor (guest preview, member preview, premium HLS).
✅ Güvenlik Avantajları:
• Hotlink engelleme (başka siteden direk link paylaşılmaz)
• Zaman sınırlı erişim (URL'ler sürekli yenilenmeli)
• İçerik indirme önleme (imza olmadan dosya alınamaz)

🔒 4. HLS AES-128 ENCRYPTION (Stream Şifreleme)

Encryption Key Generation & Storage
Her şarkı için benzersiz 128-bit AES key ve IV üretiliyor, database'e kaydediliyor.
💡 Neden Benzersiz Key:
Her şarkının farklı key'i olunca, bir key çalınırsa sadece o şarkı etkilenir.
Aynı key kullanılsaydı, tüm müzik kütüphanesi riske girerdi.
FFmpeg HLS Conversion - AES-128
FFmpeg `-hls_key_info_file` parametresi ile HLS segment'leri AES-128 CBC modunda şifreleniyor.
# FFmpeg komutu:
ffmpeg -i input.mp3 -map 0:a -c copy
-hls_time 10 -hls_list_size 0
-hls_key_info_file enc.keyinfo
-f hls playlist.m3u8
✅ Sonuç:
• Playlist.m3u8 → Metadata (hangi şifreleme, key URL, IV)
• Segment.ts dosyaları → AES-128 ile şifrelenmiş, direkt oynatılamaz
Encryption Key Serve Endpoint
GET /api/muzibu/songs/{id}/key - Binary encryption key sunuyor. Rate limited!
🔥 Akış:
1️⃣ Player HLS playlist fetch eder → Key URL görür
2️⃣ Player /api/muzibu/songs/3/key endpoint'ine istek atar
3️⃣ Server 16-byte binary key döner (rate limited: 60-180-500/dk)
4️⃣ Player segment'leri AES-128 ile decrypt edip oynatır
# HLS Playlist Metadata:
#EXT-X-KEY:METHOD=AES-128,
URI="https://muzibu.com/api/muzibu/songs/3/key",
IV=0xa8b7da4441d9a6741097f60ec38907b5
Tenant-Specific Domain Fix
Encryption key URL artık tenant-aware (muzibu.com), önceki hata (tuufi.com) düzeltildi.
❌ Önce: Key URL → https://tuufi.com/api/... (wrong domain!)
✅ Sonra: Key URL → https://muzibu.com/api/... (correct!)
Migration: encryption_iv Column
muzibu_songs tablosuna encryption_iv kolonu eklendi.
# Database Schema:
encryption_key varchar(32) - AES key (hex)
encryption_iv varchar(32) - Initialization Vector (hex)
is_encrypted tinyint(1) - Şifrelenme durumu

✅ ÖNCEKİ TAMAMLANANLAR (v1 & v2)

🔐 1. RATE LIMITING (DDoS Koruması)

Custom Throttle Middleware
Guest, Normal Üye, Premium için farklı limitler. IP bazlı (guest) + User ID bazlı (member) koruma.
💡 Limitler:
• Stream: 30/dk (Guest), 120/dk (Member), 300/dk (Premium)
• Auth: 10/dk (Guest), 20/dk (Member), 30/dk (Premium)
• API: 60/dk (Guest), 180/dk (Member), 500/dk (Premium)

🛡️ 2. isPremium() FIX + Device Limit + Subscription Cron

isPremium() Güvenlik Açığı Kapatıldı
whereNull() kontrolü kaldırıldı, sonsuz premium açığı kapatıldı.
Device Limit Enforcement
Login'de otomatik eski cihaz logout. Premium: 5 cihaz, Normal: 1 cihaz.
Subscription Verification Cron
Her gün 06:00'da otomatik expired subscription kontrolü ve status güncelleme.

⏳ KALAN ÖZELLİKLER

Redis Cache Yüksek Öncelik
Şarkı metadata, playlist, album verilerini Redis'e cache'le. Database yükünü %70 azaltır.
💡 Neden Gerekli:
Şu anda her stream isteğinde database'e query atılıyor.
Redis cache ile aynı veri memory'den servis edilir (1000x hızlı).
Keyboard Shortcuts Orta Öncelik
Space: Play/Pause | Arrow Keys: Seek | M: Mute | L: Loop | Number Keys: Playlist
Lyrics Display Orta Öncelik
Şarkı sözlerini göster, zamanla senkronize scroll (LRC formatı).

🔐 GÜVENLİK KATMANLARI ÖZET

🛡️
Katman 1: Rate Limiting
DDoS, spam, bot saldırılarını engeller. İstek sayısı limitli.
🔑
Katman 2: Signed URLs
URL'ler zaman sınırlı ve imzalı. Hotlink, indirme engellenir.
🔒
Katman 3: HLS AES-128 Encryption
Stream içeriği şifrelenmiş. Segment dosyaları direkt oynatılamaz, key gerekli.
⏱️
Katman 4: Premium Limit System
Guest: 30 sn preview, Member: 5 şarkı/gün, Premium: Sınırsız + HLS.