Mencegah Direct Download

Contoh kasus:
Kita ingin menyediakan file pdf untuk di-download oleh user dan lokasi file dihentikan diketahui oleh user. User hanya sanggup men-download file dengan cara mengklik link. Bahasa yang dipakai ialah PHP.

Analisa:
Kita sanggup menciptakan link yang ditujukan ke file yang akan di-download. Contoh instruksi menyerupai di bawah ini:

Code:
<a href="myebook.pdf">Download MyEbook</a>

Apa yang terjadi jika link menyerupai ini diklik? Hasilnya tergantung dengan browser yang bersangkutan. Bila plug-in untuk pdf reader terinstal, maka browser akan berbaik hati membuka file tersebut. Bagaimana bila tidak ada plug-in pdf reader? Maka akan muncul kotak obrolan untuk men-download file tersebut.

Satu duduk kasus tamat bila user tidak mempunyai plug-in pdf reader. Tetapi bagaimana dengan user yang punya? Tentu masalahnya tidak terselesaikan. Masalah lain muncul yaitu user mengetahui lokasi file tersebut, sehingga memungkinkan user melaksanakan direct download (men-download file langsung, dengan mengetikkan lokasinya di browser, tanpa melalui halaman download yang kita sediakan).

Penyelesaian:
Dibutuhkan sedikit programming (PHP) untuk menuntaskan duduk kasus ini.

Berikut ini instruksi untuk mencegah direct download:

<?php

$task = $_REQUEST['task'];

switch($task) {
case 'download':
// lokasi file
$file_path = 'dl/myebook.pdf';

// fungsi untuk mengambil nama file tanpa path
$file_name = basename($file_path);

// ambil ukuran file
$fsize = filesize($file_path);

// set headers
header("Pragma: public");
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Cache-Control: public");
header("Content-Description: File Transfer");
header("Content-Type: application/pdf");
header('Content-Disposition: attachment; filename="' . $file_name . '"');
header("Content-Transfer-Encoding: binary");
header("Content-Length: " . $fsize);

// mulai men-download dari sini
$file = @fopen($file_path,"rb");
if ($file) {
while(!feof($file)) {
print(fread($file, 1024*8));
flush();
if (connection_status()!=0) {
@fclose($file);
die();
}
}
@fclose($file);
}

break;
default:
echo '<a href="donlot.php?task=download">Download MyEbook</a>';
break;
}

?>


Yang perlu diperhatikan disini ialah pada baris:
header('Content-Disposition: attachment; filename="myebook.pdf"');

Baris inilah yang memerintahkan browser untuk memunculkan kotak obrolan download file myebook.pdf walaupun sudah terdapat plug-in pdf reader pada browser.

Untuk mengganti jenis file (exe atau zip), kita hanya perlu mengubah Content-Type.
Berikut ialah daftarnya:

// archives
application/zip

// documents
application/pdf
application/msword
application/vnd.ms-excel
application/vnd.ms-powerpoint

// executables
application/octet-stream

// images
image/gif
image/png
image/jpeg
image/jpeg

// audio
audio/mpeg
audio/x-wav

// video
video/mpeg
video/mpeg
video/mpeg
video/quicktime
video/x-msvideo

Untuk fungsi mendownload sanggup dilihat dari komentar pada instruksi diatas (setelah baris //mulai men-download dari sini).

Sebenarnya, apa sih tujuan mencegah direct download? Tujuannya ialah untuk mengecek berapa kali sebuah file di-download.

Bila user diperbolehkan men-download langsung, tentu akan sulit melacak berapa kali file tersebut di-download.


Semoga bermanfaat... :)

Subscribe to receive free email updates:

0 Response to "Mencegah Direct Download"

Posting Komentar