"Bak İndiriyoruz" Diyemesinler - Developer Arkadaşlar İçin Önlemler
📅 09 Ocak 2026 - Versiyon 2 (Güncellendi)
v1 Hedef: Sıradan kullanıcılar (teknik bilgisi yok) → Rate limiting, user-agent check gibi basit çözümler yeterli
v2 Hedef: Teknik bilgili developer arkadaşlar → DevTools kullanabiliyor, ffmpeg biliyor, network trafiğini okuyabiliyor → "Bak şöyle yapınca indirdim" diyemesinler!
Sorun: Şu anda şarkılar "açık metin" gibi yayınlanıyor. Teknik bilgisi olan biri şarkı parçalarını (segment) toplayıp birleştirerek kaydedebiliyor.
Çözüm: Şarkı parçalarını şifreleyeceğiz (AES-128). Şifre anahtarı sadece o kullanıcının browser'ında, sadece o oturumda geçerli olacak.
⚡ Nasıl Çalışacak?
1. Şarkı çalarken browser bir anahtar alacak (encryption key)
2. Her parça şifreli gelecek, browser anahtarla açacak
3. Anahtar sadece o cihazda, o oturumda geçerli
4. Segment'leri indirse bile şifreli, açamaz
5. Anahtarı başka cihazda kullanamazsa çözemez
Ek Koruma: Her kullanıcıya özel "ses parmak izi" (watermark). Eğer birisi şarkıyı indirip paylaşırsa, kim olduğu tespit edilir → Caydırıcı etki!
Token kontrolü değil, şifreleme kullanacağız. Segment'leri indirse bile açamayacak çünkü anahtarı yok.
Şifrelemeyi bypass edip indirse bile, kim olduğu tespit edilir.
Chrome DevTools açıksa player durdurulur, key geçersiz kılınır.
debugger; statement ile breakpoint atılır.
DevTools açıksa takılır → Player durdurulur.
⚠️ Not: %100 bypass-proof değil ama ekstra engel. Teknik kullanıcı bile uğraşır.
Mevcut MP3'leri HLS segment'lerine çevirirken AES şifreleme ekle
# FFmpeg komutu
ffmpeg -i song.mp3 \
-hls_time 10 \
-hls_key_info_file keyinfo.txt \
-hls_segment_filename "segment-%03d.ts" \
playlist.m3u8
keyinfo.txt: Key URI, key dosya path, IV (initialization vector)
Her kullanıcı session'ı için benzersiz AES key oluştur
// Laravel Controller
$key = hash('sha256', $sessionId . $userId . $fingerprint);
Cache::put("song_key_{$songId}_{$sessionId}", $key, 600); // 10 dakika
Key sadece o session + user + browser kombinasyonuna özel
HLS player key'i ayrı endpoint'ten alacak
// Route
Route::get('/api/songs/{id}/key', [SongController::class, 'getDecryptionKey'])
->middleware(['auth', 'premium', 'fingerprint.verify']);
Key endpoint'i fingerprint + session doğrulaması yapacak
Canvas, WebGL, Audio API ile benzersiz parmak izi oluştur
// JavaScript
import FingerprintJS from '@fingerprintjs/fingerprintjs';
const fp = await FingerprintJS.load();
const result = await fp.get();
const fingerprint = result.visitorId; // Benzersiz ID
Her cihaz/browser kombinasyonu farklı fingerprint → Key binding için kullanılır
Key'i localStorage'a ASLA yazma, sadece RAM'de tut
// JavaScript - YANLIŞ ❌
localStorage.setItem('decryption_key', key); // YAPMA!
// DOĞRU ✅
let decryptionKey = null; // Sadece variable'da tut
window.addEventListener('beforeunload', () => decryptionKey = null);
Sayfa kapatılınca key kaybolur, DevTools'dan bile alınamaz
DevTools açılırsa player durdur, key'i invalidate et
// JavaScript
setInterval(() => {
const devtoolsOpen = /./[Symbol.toStringTag];
if (devtoolsOpen) {
player.pause(); // Player durdur
decryptionKey = null; // Key'i yok et
alert('DevTools kapatın lütfen');
}
}, 1000);
Her kullanıcıya özel inaudible watermark ekle
# FFmpeg Audio Watermarking
ffmpeg -i song.mp3 \
-af "aecho=0.8:0.9:1000|1800:0.3" \
-metadata user_id="123" \
-metadata timestamp="2026-01-09" \
watermarked_song.mp3
User ID + Timestamp yüksek frekansta gömülü (18-20 kHz)
Sızdırılan dosyayı analiz edip kullanıcı tespit et
Acoustic fingerprint analysis ile watermark'ı decode et → User ID + Timestamp çıkar
Player'da uyarı göster
⚠️ Bu şarkı size özel watermark içerir.
Paylaşırsanız kimliğiniz tespit edilir.
Kullanıcı bunu görünce "indirmeye değmez" der
DevTools kullanabiliyor, ffmpeg biliyor, network trafiğini okuyabiliyor. v1 çözümleri (rate limit, user-agent) bypass edebilir.
Segment URL'ini bulsa bile içerik şifreli. Decryption key olmadan açamaz. Key session-bound olduğu için başka yerde kullanamaz.
Şifrelemeyi bypass edip indirse bile, watermark sayesinde kim olduğu tespit edilir. "İndirebilirim ama paylaşamam" der → Caydırıcı etki.
📌 Sonuç: 3 katmanlı koruma (Encryption + Fingerprint + Watermark) ile teknik kullanıcı bile zorlanır. "Bak indiriyoruz" diyemezler!
⚠️ Gerçek: %100 engelleme imkansız. Screen recording, analog capture her zaman mümkün. Ama o kadar uğraşmaya değmez hale getireceğiz.
⏱️ Toplam Süre: 5-6 gün (fullstack geliştirme)
💰 Maliyet: 0 TL (FingerprintJS Pro hariç - $99/ay opsiyonel)
📊 Beklenen Etki: %95+ teknik kullanıcı bile engellenir
Adım 1: Mevcut HLS sistemini analiz edip AES-128 encryption ekleyeceğim.
Adım 2: Browser fingerprinting ile key binding yapacağım.
Adım 3: Watermark sistemi kuracağım (opsiyonel ama önerilir).
❓ Onay verin:
"UYGUNDUR" derseniz Faz 1'e başlıyorum (AES-128 Encryption).
Yoksa önce başka bir şey mi inceleyelim?