+ Yanıtla
Toplam 3 sonuçtan 1 ile 3 arası olanlar

Konu Başlığı: Download Protection

  1. #1

    Download Protection

    Merhaba arkadaslar,

    PHP ile bir sistem gelistiriyorum. Sistemde 400-500MB boyunda dosyalar bulunuyor ve kullanici bu dosyalari indirmek icin uye olmasi gerekiyor. Uyelik sistemini hazirladim yalniz download sayfasinda oyle bir sey yapmaliyimki hem kullanici sorun yasamadan dosyalari download etmeli (download in resume destegi olabilmeli ve ayni anda bir kac segment ile download edebilmeli) hemde url yi baskasiyla paylasamamali yani direkt download linkini gorememeli.

    Daha once gelistirdigim bir image hosting sitesi icin asagidaki yonetimi kullanmistim ama bu yontemin burada ise yarayacagini dusunmuyorum. Kullanicinin bir dosyayi bir kac gun de download etmesi halinde bu sistem calismaz cunku ip adresine bakiyor ayrica buyuk dosyalarda serveri kasacak bir sistem kullaniyor. Ben yinede belki isinize yarar diye bu sistemi anlatayim.

    .htaccess kullanarak kullaniciya bir url veriyorum;

    http://www.icuru.com/images/192/abc123abc123

    burada /images -> .htaccess ile imageview.PHP dosyasina yonlendirme yapilicagini gosteriyor

    192 image in dosya adi. Imageleri sistemde 1.jpg, 2.jpg, 3.jpg ...... 192.jpg sekkinde tutuyorum ve bu dosyalarin bulundugu dizin
    http://www.icuru.com/gizlidizin/192.jpg seklinde... Siz direkt bu url yi kullanarak image e ulasabiliyorsunuz benim zaten tum cabam linkin kopyalanmasini engellemek icin bu dizini saklamak


    abc123abc123... ise benim md5 ile yarattigim bir anahtar bu anahtar soyle bir seyden olusuyor;
    md5("icurugizli".$_SERVER["REMOTE_ADDR"]);
    burada kullanicinin ip adresini ve "icurugizli" anahtar kelimesini md5 ile kodluyorum. Ileride bu anahtari cozerken tekrar bu kombinasyonu kullaniyorum.

    Kullanici bu url yi yazinca "http://www.icuru.com/images/192/abc123abc123"
    imageview.PHP dosyasina 2 parametre gidiyor. Birincisi 192, ikincisi abc123abc123 burada abc123 kismi kullanicinin ipsine gore yaratildigi icin her kullanicida farkli bir deger gonderiyor. Simdi imageview.PHP de ne olduguna bakalim ;

    oncelikle imageview.PHP yi cagiran kullanicinin ip adresini alalim ve bunu icurugizli kelimesi ile birlikte md5 ini yaratalim. Bu yaratilan md5 ile parametre olarak gelen md5 key nin ayni olmasi lazim EGER kullanicinin ipsi ayni ise. Bu dogrulamayi yaptikdan sonra ilk parametre olarak 192 nin sonuna .jpg ekliyoruz ve bu dosyayi bulundugu orjinal dizinden cagirip kullaniciya gosteriyoruz. Cok net anlatamadigimi biliyorum bu yuzden size asagida imageview.PHP dosyasinin kodunu veriyorum.

    Kod:
    <?PHP
    if ($_GET["c"] <> "")
    	{
    	if ($_GET["n"] <> "")
    		{
    		$image_no = $_GET["n"];
    		if (md5($_SERVER["REMOTE_ADDR"].$image_no."topsecret") == $_GET["c"])
    			{
    			// image i goster kod dogru
    			header('content-type: image/jpeg');  
    			$src_img = ImageCreateFromJpeg("gizlidizin/".$image_no.".jpg");	
    			imagejpeg($src_img);
    			imagedestroy($src_img);
    			}
    			else
    			{
    			// guvenlik kodu yanlis
    			noimage();
    			}
    		}
    		else
    		{
    		// yok resmini goster
    		noimage();
    		}
    	}
    	else
    	{
    	// yok resmini goster
    	noimage();
    	}
    ?>
    Selamlar
    dusk till dawn // Jazz Whiskey Cigar // over and overloaded again // coding... quaking...

    Minimal Code - Sayfalar.com

  2. #2

    Re: Download Protection

    En sağlam çözüm .htaccess dosyası ile yapılan bir koruma olacaktır muhtemelen. Diğer yöntelmerde dosyayı bir PHP dosyası üzerinden geçirmeniz gerekir ki bu da hem çoklu indirme desteğini zora sokar hem de sunucuya biraz daha çok yük bindirir.

    İlk yöntem HTTP Basic Authentication kullanmak. Dosyaların olduğu klasöre authentication şartkı koyup indirme isteğinde kullanıcı adı ve parolasını isteyebilirsin. Bunu Apache ile yapmak için kullanıcı veritabanından uygun bir htaccess password dosyası oluşturman gerekiyor ki yöntemin dezavantajı da burada.

    İkinci yöntem mod_rewrite kullanıp, RewriteCond ifadesiyle cookie'leri kontrol etmek. Senin ayarladığın bir cookie varsa ya da değeri istediğin bir şeyse kullanıcıyı ilgili dosyaya yönlendirirken değilse yasaklı sayfasına yönlendirebilirsin. Bu yöntemin dez avantajı ise cookie'lerin bu tarz işler için yeterince güvenilir olmaması.

    Bir üçüncü yöntem olarak mod_rewrite içinde cgi script kullanabilirsin ancak bu konuda benim yeterli bilgim yok ki yapması da o kadar kolay değil sanıyorum

    İkinci yöntemle ilgili http://forums.powervps.com/archive/i...hp/t-1975.html adresinde güzel 1-2 örnek var. Umarım işine yarar

  3. #3

    Re: Download Protection

    Tesekkurler aklima gelen en iyi cozum su oldu.

    1. Download linkine tiklayinca oncelikle 2 kez 512kb lik veri gondererek kullanicinin baglanti hizini test edicem.
    Bunu yaparken su mantigi kullaniyorum artik insanlarin internet baglanti hizlari min. 128k dial-up kullanan kalmadi! Veya kaldiysa bile internetden dialup baglanti ile 500MB lik demo indiricek kadar cilgin degil.

    2. Baglanti hizi ogrendikden sonra dosyayi normalde ne kadar surede indiricegini hesapliyorum. Bazi demolarin boylari 2GB olabiliyor eger 256k ile indirmeye kalkarsa 17 saatden fazla surer. Buna gore mesela min 72 saatlik download suresi taniyorum bunuda kullaniciya belirtiyorum. Daha sonra rastgele bir kullanici adi ve sifre tanimlayip bunu .htaccess ile dosyanin bulundugu klasore ekliyorum. Daha sonra bu bilgileri database de bir table a ekliyorum table soyle oluyor.
    download_no // unique key
    kullanici_no // kullanicilar table ile iliskili hangi kullanici download yaptigini belirtiyor
    demo_no // demolar table ili iliskili hangi demonun indirildigini belirtiyor
    gecici_kullanici // gecici olarak yaratilmis kullanici adi
    gecici_sifre // gecici olarak yartilmis sifre
    baslangic // download a baslama zamani
    bitis // download icin belirlenen deadline

    kullaniciya soyle bir url veriyorum download icin
    http://gecici_kullanici:gecici_sifre...ver_pcdemo.exe

    daha sonra bir cron job tanimliyorum ve bitis zamanini kontrol ediyorum. Eger bitis zamanini gecen bir kayit varsa gecici_kullanici ve gecici_sifre .htaccess den kaldiriliyor. Boylece link kullanilamaz hale geliyor.

    Simdilik bu yontemi kullanicam eger pratikte bir sorun cikarsa buraya yazarim...

    Selamlar
    dusk till dawn // Jazz Whiskey Cigar // over and overloaded again // coding... quaking...

    Minimal Code - Sayfalar.com

+ Yanıtla

Bu konu başlığı için etiketler

Mesaj Seçenekleri

  • Yeni başlık açamazsınız
  • Cevap yazabilirsiniz
  • Dosya ekleyemezsiniz
  • Mesajlarınızı değiştiremezsiniz