2013-05-09 41 views
0

如何保護數碼產品(視頻,音頻,電子書等)免於未經授權的下載?我正在使用Apache服務器和PHP/MySQL。請幫忙!PHP:如何保護數字產品(視頻,音頻,電子書等)免於無條件下載?

謝謝! Paul G.

編輯:對不完整的問題抱歉。我想要的是避免其他成員共享直接下載鏈接到他們有權訪問非成員的文件。我聽說可以通過在根文件夾外部存儲數字產品來完成這項工作,但我不知道如何使用PHP來實現它。

+1

如果所有最終都可用,則不能。否則用戶名\密碼像任何其他網站 – 2013-05-09 22:11:42

+0

@大佬是的,我知道如何。對不完整的問題抱歉。我想要的是避免其他成員共享直接下載鏈接到他們有權訪問非成員的文件。我聽說可以通過在根文件夾外部存儲數字產品來完成這項工作,但我不知道如何使用PHP來實現它。 – netizen0911 2013-05-09 22:18:22

+0

@ netizen0911更新你的問題,使其更具體。使用編輯。 – michi 2013-05-09 22:19:38

回答

2

我打算假設你正在試圖保護只能用於「已登錄」用戶的文件......如果你只是想阻止人們下載嵌入在你的文件中的文件網站確實沒有什麼可以做的。

因此,在您試圖允許文件訪問/下載僅允許獲得批准的用戶使用的前提下,您最好的選擇是僅通過php控制器文件(我們稱之爲serve_file.php)爲受保護的內容提供服務。您將實際文件存儲在公共根目錄(或其他無法訪問的文件夾)之外,或者將文件作爲BLOB數據存儲在MySQL表中。

然後,當用戶想要下載的文件,將提供一個鏈接到serve_file.php一些_GET數據識別他們正在試圖獲得該文件:

http://mysite.com/serve_file.php?file_id=24,例如。

serve_file.php腳本獲取_GET數據,計算出它指示的文件,然後檢查權限表(或僅檢查用戶是否已登錄)並確定用戶是否有資格接收該文件。如果是這樣,它得到的文件數據(無論是從MySQL或file_get_content()),吐出來適當headers(取決於你在提供什麼類型的文件了),然後print/echo S的內容:

//check that the user is logged in (I'm assuming you have a function of this name) 
if (!user_logged_in()){ 
    die('You do not have permission! Please log in'); 
} 

/*see what file the user is trying to get... 
this is a very simple sample that can only get PDFs. 
You should probably have a table with file details*/ 
$file_location = $_SERVER['DOCUMENT_ROOT'].'/../protected_files/file_'.intval($_GET['file_id']).'.pdf' 
if (!is_file($file_location)){ 
    die('Could not get that file!'); 
} 

$content = file_get_contents($file_location); 
header("Content-Type: application/pdf"); 
header("Content-Length: ".strlen($content)); 
//add some more headers here, to deal with caching, etc 
echo $content; 
die(); 

您設置的header告訴用戶的瀏覽器應該如何解讀您發送的數據(例如,作爲Content-Type: application/pdf),並且您已經成功地僅允許授權用戶訪問文檔,因爲他們總是必須通過你的PHP認證腳本。

+0

謝謝你!有用! – netizen0911 2013-06-16 01:20:14