Müzik dosyalarına güvenli ve süreli erişim
Signed URL (İmzalı URL) ile müzik dosyalarına erişimi kontrol ediyoruz. Her şarkı linki benzersiz bir imza ve son kullanma tarihi içerir. Süresi dolan veya kopyalanan linkler çalışmaz.
Bir şarkı linkini başkasına gönderdiniz diyelim. O kişi linki açtığında çalışmaz çünkü: 1) Link sizin oturumunuza özeldir. 2) Linkin süresi dolmuştur. Bu sayede premium içeriklerin izinsiz paylaşımı engellenir.
Şarkı ID + Kullanıcı ID + Zaman damgası + Gizli anahtar → HMAC-SHA256 imza
Player bu URL'i kullanarak şarkıyı stream eder.
İmza geçerli mi? Süre dolmamış mı? Her iki koşul da sağlanmalı.
Geçerliyse müzik akışı başlar, değilse 403 hatası.
Şarkı çalmak istediğinizde sistem süreli ve imzalı bir URL oluşturur. İşte bu güvenli erişim sürecinin teknik detayları:
Kullanıcı şarkı çalmak istediğinde StreamController::generateUrl($song) çağrılır. Şarkı ID ve kullanıcı bilgileri alınır.
$expires = now()->addMinutes(15)->timestamp ile 15 dakikalık geçerlilik süresi Unix timestamp olarak hesaplanır.
hash_hmac('sha256', $data, $secretKey) ile şarkı ID + kullanıcı ID + süre birleştirilerek benzersiz imza üretilir.
/stream/{id}?signature={hash}&expires={time} formatında URL oluşturulur ve player'a gönderilir.
İstek geldiğinde SignedUrlMiddleware önce süre, sonra imza kontrolü yapar. hash_equals() ile timing attack önlenir.
Doğrulama başarılı ise response()->stream() ile müzik dosyası byte-range destekli akışa başlar.
(İmzalı URL)
Kriptografik imza içeren, süreli erişim sağlayan URL.
(Hash-based Message Authentication)
Gizli anahtar ile veri doğrulama algoritması.
(Son Kullanma Tarihi)
URL'in geçerli olduğu son an. Unix timestamp formatında.
(Akış)
Dosyayı indirmeden, parça parça dinleme yöntemi.