我用PHP和MYSQL製作了一個數據庫系統。它有很多敏感信息,所以我試圖把最好的安全性。試圖保護多媒體文件
我對視頻和音頻文件有疑問。我只想要登錄並且實際上有權下載文件以便能夠下載它們的用戶,而不是任何只指向媒體文件所在的文件夾的用戶。我怎樣才能做到這一點?!謝謝!
我用PHP和MYSQL製作了一個數據庫系統。它有很多敏感信息,所以我試圖把最好的安全性。試圖保護多媒體文件
我對視頻和音頻文件有疑問。我只想要登錄並且實際上有權下載文件以便能夠下載它們的用戶,而不是任何只指向媒體文件所在的文件夾的用戶。我怎樣才能做到這一點?!謝謝!
通過一個php包裝器(即<img src="files/file.php?id=oj348jfoj" />
)調用你的文件,並在你的file.php文件中輸出帶有圖像頭的文件,如果用戶有權查看文件的話。在你的表中,你有與你的oj348jfoj
標記對應的真實圖像URI,這就是你file.php加載並輸出爲請求者的圖像。通過這種方式,服務器文件的真實URI保持隱藏狀態,您可以檢查每個圖像加載的訪問權限。
所以。這些文件必須在服務器上,這很明顯。這裏有一個建議:將它們隱藏在某個地方。然後,當用戶點擊下載時,複製將其內容複製到臨時位置並保存到10到30分鐘的MySQL表中(如果HUGE文件可能更多)。然後用戶可以從該鏈接下載。最後,每10-30分鐘(等量)運行一次cronjob,刪除過期的文件。
這不是100%的安全性,因爲一個未登錄的用戶也可以下載,但只有當登錄的用戶共享URL時,他們纔可以直接發送給他們。
您需要使用PHP流式傳輸文件。使用查詢字符串傳遞文件的名稱,然後將其寫入頁面。在流式傳輸文件之前,您可以檢查權限。
僞代碼:
header("Content-Disposition: atachment; filename=$filename");
header("Content-Type: application/octet-stream");
header("Content-Length: ".filesize("$path/$filename"));
header("Pragma: no-cache");
header("Expires: 0");
$fp=fopen("$path/$filename","r");
print fread($fp,filesize("$path/$filename"));
fclose($fp);
exit();
你存儲數據庫或文件系統上的文件? – Vyktor 2012-02-05 18:43:45